我正在使用简单的线程模块来执行并发作业。现在我想利用并发 future 模块。有人能给我举一个使用并发库的队列的例子吗?
我收到 TypeError: 'Queue' 对象不可迭代 我不知道如何迭代队列
代码片段:
def run(item):
self.__log.info(str(item))
return True
<queue filled here>
with concurrent.futures.ThreadPoolExecutor(max_workers = 100) as executor:
furtureIteams = { executor.submit(run, item): item for item in list(queue)}
for future in concurrent.futures.as_completed(furtureIteams):
f = furtureIteams[future]
print(f)
最佳答案
我建议这样:
def run(queue):
item = queue.get()
self.__log.info(str(item))
return True
<queue filled here>
workerThreadsToStart = 10
with concurrent.futures.ThreadPoolExecutor(max_workers = 100) as executor:
furtureIteams = { executor.submit(run, queue): index for intex in range(workerThreadsToStart)}
for future in concurrent.futures.as_completed(furtureIteams):
f = furtureIteams[future]
print(f)
您将遇到的问题是,队列被认为是无限的,并且作为一种媒介来解耦将某些内容放入队列的线程和从队列中获取项目的线程。
当
- 您的元素数量有限或
- 您一次计算所有项目
然后并行处理它们,队列就没有意义了。 在这些情况下,ThreadPoolExecutor 会使队列变得过时。
我查看了 ThreadPoolExecutor 源代码:
def submit(self, fn, *args, **kwargs): # line 94
self._work_queue.put(w) # line 102
内部使用了一个Queue。
关于python - 如何在 python 3 中使用带有并发 future ThreadPoolExecutor 的队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16914665/