我是 Python 的新手,但我想编写一个用作multiprocessing.QueueGo 通道的多进程程序。但是,似乎并multiprocessing.Queue.put(, block=True)没有像记录的那样阻止。
这是我的 Python 示例程序:
import multiprocessing
import select
import time
def f(q):
while True:
time.sleep(1)
print("Put")
q.put("hello world")
if __name__ == "__main__":
q = multiprocessing.Queue(maxsize=0)
f(q)
我希望它只会打印一个“Put”并永远阻塞。但是,我得到的是它反复打印“Put”。
这是我认为几乎等效的 Go 程序,只是 goroutine 是一个绿色线程而不是进程。
package main
import (
"fmt"
"time"
)
func main() {
ch := make(chan int)
for {
time.Sleep(time.Second)
fmt.Println("Put")
ch <- 1
}
}
当我键入 时go run csp.go,它只打印一个“Put”,Go 运行时提示程序处于死锁状态。
为什么multiprocessing.Queue.put()不阻止?
临摹微笑
相关分类