如何使用Python';没有哨兵/毒丸的可加入队列?
我以传统的方式使用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
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