python - 如何在使用 Python3 创建一个实例后立即做某事?
问题描述
我在 Python3 中使用多处理时遇到问题。我使用多处理读取多个文件并使用读取数据创建实例。在阅读和创建实例之后,我想要的是在创建一个实例之后,做一些事情。但它不像我预期的那样工作。
下面的代码实际上会等待所有创建的实例,然后执行 do_something 代码。这不是我所期望的。
import multiprocessing
import os
from itertools import repeat
pool = multiprocessing.Pool(processes=3)
pool = multiproccesiin.pool.ThreadPool(processes=1)
events = list(map(lambda x: os.path.split(x)[1].split('.')[0], events))
async_results = pool.startmap_async(Writer,zip(events, repeat(self._settings['TANKDIR']), repeat(self._settings['CATDIR']),repeat(self._settings['DATADIR'])))
# Writer is my class init.
# The earliest created instance takes about 4.5 sec.
tpool.map(do_something, async_results.get())
# I thought tpool.map part start do_something right after one instance created.'
解决方案
tpool.map(do_something, async_results.get())
只会将第一个Writer
实例发送到do_something
函数。
此方法将可迭代对象分割成多个块,将它们作为单独的任务提交给进程池。这些块的(近似)大小可以通过将 chunksize 设置为正整数来指定。
因此,您对tpool.map
呼叫所做的操作等同于do_something(async_result.get())
-- 即。只发送第一个Writer
到do_something
在不了解您的用例的情况下,解决方案可能很简单tpool.map(do_something, list(async_results))
推荐阅读
- reactjs - 如何将所选项目添加到表 Reactjs?
- reactjs - 使用 Mathquill 显示数学函数
- html - 带边框的缺口框
- webhooks - 将 Webflow 表单结果发布到 Slack 通道
- javascript - 在php中获取API方法补丁
- spring-boot - 按角色保护特定端点
- python - 在多维列表中追加项目
- hyperlink - 如何在 Markdown 单元格中创建链接
- ios - 下载多个图像后超出 Cloud Storage for Firebase 带宽配额 - 最佳做法是什么?
- python-3.x - KivyMD MDBoxLayout 对齐问题