地址:https://github.com/adwpc/pagent
pagent是一個(gè)多進(jìn)程模型的golang庫,具有以下特點(diǎn):
簡單: 父子進(jìn)程只通過stdin和stdout來交互
安全: 多進(jìn)程很安全,子進(jìn)程掛掉一個(gè)不影響其他子進(jìn)程
解耦:子進(jìn)程交互和業(yè)務(wù)分離
例子:
package main
import (
? ? "fmt"
? ? "time"
? ? "github.com/adwpc/pagent"
)
type MyBiz struct {
? ? pagent.Master
}
func NewBiz() *MyBiz {
? ? return &MyBiz{}
}
func (a *MyBiz) BizRunning(id, str string) error {
? ? fmt.Println("[MyBiz BizRunning] str=" + str)
? ? return nil
}
func (a *MyBiz) BizFinish(id string, err error) error {
? ? fmt.Println("[MyBiz BizFinish] id=" + id)
? ? return err
}
func main() {
? ? a := NewBiz()
? ? fmt.Println("worker1-------------------------")
? ? a.GetWorker("worker1").Start("bash", a.BizRunning, a.BizFinish)
? ? a.GetWorker("worker1").Input("ls")
? ? time.Sleep(1 * time.Second)
? ? a.DelWorker("worker1")
? ? fmt.Println("worker2-------------------------")
? ? a.GetWorker("worker2").Start("ifconfig", nil, a.BizFinish)
? ? time.Sleep(1 * time.Second)
? ? a.DelWorker("worker2")
? ? fmt.Printf("end!----------------------------")
}