多进程如何共享一个公共队列?

How multiprocess share a common queue?

我想启动 4 个进程,当计数器可被 100.Same 整除时另一个进程连续读取它并打印 it.Please 将我的代码更正为 运行 时将整数放入队列。 ..我收到一个错误 ['Queue' object is not iterable]

from multiprocessing import Lock, Process, Queue, current_process
import time
import queue 


def doFirstjob(process_Queue):
    i=0

    while True:
        if i%100==0:
            process_Queue.put(i)
        else:
            i+=1


def doSecondjob(process_Queue):
    while(1):
        if not process_Queue.Empty:
            task = process_Queue.get()
            print("task: ",task)
        else:
            time.sleep(0.2)

def main():
    number_of_processes = 4
    process_Queue = Queue()
    processes = []
    process_Queue.put(1)

    q = Process(target=doSecondjob, args=(process_Queue))
    q.start()

    for w in range(number_of_processes):
        p = Process(target=doFirstjob, args=(process_Queue))
        processes.append(p)
        p.start()


if __name__ == '__main__':
    main()

您遇到错误是因为 Process 在 arguments/args 中期待 list/tuple。

此外,它应该是空的而不是 Empty。

将代码更改为以下内容。

from multiprocessing import Lock, Process, Queue, current_process
import time
import queue 


def doFirstjob(process_Queue):
    i=0

    while True:
        print("foo")
        if i%100==0:
            process_Queue.put(i)
        else:
            i+=1


def doSecondjob(process_Queue):
    while(1):
        print("bar")
        if not process_Queue.empty:
            task = process_Queue.get()
            print("task: ",task)
        else:
            time.sleep(0.2)

def main():
    number_of_processes = 4
    process_Queue = Queue()
    processes = []
    process_Queue.put(1)

    q = Process(target=doSecondjob, args=(process_Queue,))
    q.start()

    for w in range(number_of_processes):
        p = Process(target=doFirstjob, args=(process_Queue,))
        processes.append(p)
        p.start()


if __name__ == '__main__':
    main()