我想在不同的过程中运行3 go例程。经过研究,我发现我需要使用runtime.GOMAXPROCS()。但即使在使用runtime.GOMAXPROCS()之后,所有例程都在相同的进程上运行。如何让它在不同的进程上运行。下面是代码和输出。以下是goplayground
的链接import ast
with open('file.txt') as f:
values = ast.literal_eval(f.read())
X, Y = zip(*values)
输出:
func main() {
runtime.GOMAXPROCS(4)
fmt.Printf("Number of CPU %d \n",runtime.NumCPU())
fmt.Printf("Process id of main %d \n\n",os.Getpid())
for i:=0 ;i<3; i++{
go printAndSleep(i)
}
time.Sleep(time.Second * 100)
}
func printAndSleep(i int){
for {
fmt.Printf("Process id of %d go routine %d \n",i,os.Getpid())
time.Sleep(time.Second * 2)
}
}
即使我使用过GOMAXPROCS,您也可以在同一个进程中看到所有例程运行。这是为什么?我用错了吗
答案 0 :(得分:-1)
如果您只想在每个进程上运行一个goroutine,则可以使用runtime.LockOSThread()在该进程上运行的进程和goroutines之间建立1:1的关系。在您的情况下,每次启动新的goroutine时都应该调用runtime.LockOSThread。
for i:=0 ;i<3; i++{
go func(){
runtime.LockOSThread()
printAndSleep(i)
}()
}