Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Python';没有哨兵/毒丸的可加入队列?_Python_Queue_Python Multiprocessing - Fatal编程技术网

如何使用Python';没有哨兵/毒丸的可加入队列?

如何使用Python';没有哨兵/毒丸的可加入队列?,python,queue,python-multiprocessing,Python,Queue,Python Multiprocessing,我以传统的方式使用Python多处理,通过发送毒药丸或哨兵来发出队列应该结束的信号 现在我正在尝试使用JoinableQueue.join&JoinableQueue.task\u done方法,我不知道如何使用它。我在谷歌上搜索的所有示例都使用了毒丸方法,即使使用了JoinableQueue 我如何正确地书写它 from multiprocessing import Process, JoinableQueue from multiprocessing.queues import Empty

我以传统的方式使用Python多处理,通过发送毒药丸或哨兵来发出队列应该结束的信号

现在我正在尝试使用
JoinableQueue.join
&
JoinableQueue.task\u done
方法,我不知道如何使用它。我在谷歌上搜索的所有示例都使用了毒丸方法,即使使用了
JoinableQueue

我如何正确地书写它

from multiprocessing import Process, JoinableQueue
from multiprocessing.queues import Empty
from time import sleep

def file_reader(q, filename):
    # pretend it reads a file with different speed
    sleep(1)
    q.put('A')
    sleep(1)
    q.put('B')
    sleep(2)
    q.put('C')

def data_processor(q1, q2):
    # this one processes the data rather quickly
    while True:
        data = q1.get()
        q2.put(f'> {data} <')
        q1.task_done()

q1 = JoinableQueue()
q2 = JoinableQueue()

p1 = Process(target=file_reader, args=(q1, 'test'))
p2 = Process(target=data_processor, args=(q1, q2))
p1.start()
p2.start()

while True:
    try:
        data1 = q2.get(timeout=3)
        print(data1)
        q2.task_done()
    except Empty:
        print('empty!')
        break


p1.join()
print('p1 joined')
p2.join()
print('p2 joined')
来自多处理导入进程,JoinableQueue
从multiprocessing.queues导入空
从时间上导入睡眠
def文件读取器(q,文件名):
#假设它以不同的速度读取文件
睡眠(1)
q、 放('A')
睡眠(1)
q、 put('B')
睡眠(2)
q、 put('C')
def数据处理器(第一季度、第二季度):
#这一个处理数据相当快
尽管如此:
data=q1.get()

q2.put(f'>{data}为什么你不想使用sentinel?@user2357112我有一个sentinel代码,它确实有效。但我在某个地方读到,这种方法更好或更干净,我想试试。
> A <
> B <
> C <
empty!
p1 joined