在Python中将线程和进程与共享队列一起使用

时间:2015-01-24 18:26:26

标签: python multithreading queue

我正在尝试同时使用多线程队列和多处理队列。 20个线程将使用线程队列来检索许多网页。然后,我想将页面放入多进程队列,以便4个进程工作者可以处理数据。以下是我的基本结构。我的问题是,工作队列给出了一个错误,说Queue不可迭代。我认为多线程队列正在覆盖多进程队列,但我真的不知道出了什么问题。

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

1 个答案:

答案 0 :(得分:10)

中缺少逗号
p = Process(target = worker, args = (work_queue)).start()

(work_queue)

只是一个表达式,而你想要的是一个1元素的元组:

(work_queue,)

注意额外的逗号。