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

时间:2018-12-04 12:22:42

标签: python queue multiprocess

我想启动4个进程,当计数器可被100整除时,该进程将一个整数放入队列中。同一时间另一个进程连续读取并打印它。请更正我的代码以运行...我收到一个错误['Queue '对象不可迭代]

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()

1 个答案:

答案 0 :(得分:1)

您收到错误消息是因为Process期望参数/参数中有一个列表/元组。

也应该不是空,而是应该为空。

将代码更改为下面的

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()