python - 如何在 python 3 中使用带有并发 future ThreadPoolExecutor 的队列?

标签 python multithreading python-3.x queue concurrent.futures

我正在使用简单的线程模块来执行并发作业。现在我想利用并发 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)

您将遇到的问题是,队列被认为是无限的,并且作为一种媒介来解耦将某些内容放入队列的线程和从队列中获取项目的线程。

  1. 您的元素数量有限或
  2. 您一次计算所有项目

然后并行处理它们,队列就没有意义了。 在这些情况下,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/

相关文章:

python - 正则表达式组引用长度

Python AST 到字典结构

java - 2 线程访问共享资源没有synchronized关键字,仍然可以正常工作

python - 使用简单的 PyQT UI 选择目录路径粉碎

java - 实现HIkariCP时出现ResultSetImpl错误

c# - 在 Parallel.ForEach 之外设置断点时的列表计数无效

集成在 GTK3/PyGObject 中的 Python 网络/tcp 包

python - Hadoop流-昂贵的共享资源(COOL)

python - 将 pd.get_dummies 结果转换为 df.str.get_dummies

python - 如何从二维元组中选择一行