在 Python 中将线程和进程与共享队列一起使用
Using threads and processes together with shared queues in Python
我正在尝试同时使用多线程队列和多处理队列。线程队列将由 20 个线程使用来检索许多网页。然后我想将页面放入一个多进程队列中,以便 4 个进程工作人员可以处理数据。下面是我的基本结构。我的问题是,工作队列给出了一个错误,指出队列不可迭代。我认为多线程队列正在覆盖多进程队列,但我真的不知道出了什么问题。
ticker_queue = Queue()
work_queue = Queue()
tickers = get_tickers()
for i in tickers:
ticker_queue.put(i)
for i in range(20):
t = Thread(target=network_worker, args = (ticker_queue, work_queue)).start()
for i in range(4):
p = Process(target = worker, args = (work_queue)).start()
这是回溯
Traceback (most recent call last):
File "OneDrive\Python\andys.py", line 108, in <module>
p = Process(target = worker, args = (work_queue)).start()
File "C:\Python27\lib\multiprocessing\process.py", line 104, in __init__
self._args = tuple(args)
TypeError: 'Queue' object is not iterable
中少了一个逗号
p = Process(target = worker, args = (work_queue)).start()
因为
(work_queue)
只是一个表达式,而你想要的是一个单元素元组:
(work_queue,)
注意额外的逗号。
我正在尝试同时使用多线程队列和多处理队列。线程队列将由 20 个线程使用来检索许多网页。然后我想将页面放入一个多进程队列中,以便 4 个进程工作人员可以处理数据。下面是我的基本结构。我的问题是,工作队列给出了一个错误,指出队列不可迭代。我认为多线程队列正在覆盖多进程队列,但我真的不知道出了什么问题。
ticker_queue = Queue()
work_queue = Queue()
tickers = get_tickers()
for i in tickers:
ticker_queue.put(i)
for i in range(20):
t = Thread(target=network_worker, args = (ticker_queue, work_queue)).start()
for i in range(4):
p = Process(target = worker, args = (work_queue)).start()
这是回溯
Traceback (most recent call last):
File "OneDrive\Python\andys.py", line 108, in <module>
p = Process(target = worker, args = (work_queue)).start()
File "C:\Python27\lib\multiprocessing\process.py", line 104, in __init__
self._args = tuple(args)
TypeError: 'Queue' object is not iterable
p = Process(target = worker, args = (work_queue)).start()
因为
(work_queue)
只是一个表达式,而你想要的是一个单元素元组:
(work_queue,)
注意额外的逗号。