Я новичок в Python, но я хочу написать многопроцессорную программу, которая использует multiprocessing.Queue
в качестве канала Go.Однако, похоже, что 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» несколько раз.
Вот программа 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()
не блокирует?