如何在使用Python3创建一个实例之后立即执行某些操作?

如何在使用Python3创建一个实例之后立即执行某些操作?,python,multiprocessing,threadpool,Python,Multiprocessing,Threadpool,我在Python3中使用多处理时遇到问题。我使用多处理读取多个文件,并使用读取数据创建实例。在阅读和创建实例之后,我想要的是在创建一个实例之后,做一些事情。但它并没有像我预期的那样起作用 import multiprocessing import os from itertools import repeat pool = multiprocessing.Pool(processes=3) pool = multiproccesiin.pool.ThreadPool(processes=1)

我在Python3中使用多处理时遇到问题。我使用多处理读取多个文件,并使用读取数据创建实例。在阅读和创建实例之后,我想要的是在创建一个实例之后,做一些事情。但它并没有像我预期的那样起作用

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.'
下面的代码实际上是在等待创建所有实例之后运行的,之后执行一些代码。这不是我所期望的

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.mapdo\u something、async\u results.get只将第一个Writer实例发送到do\u something函数

此方法将iterable拆分为若干块,并将其作为单独的任务提交给流程池。可以通过将chunksize设置为正整数来指定这些块的大致大小

因此,您使用tpool.map调用所做的操作相当于执行某些操作sync\u result.get-即只发送第一个编写器执行某些操作


在不了解更多用例的情况下,解决方案可能很简单,如tpool.mapdo\u something,listasync\u results

我尝试了你的建议,但没有得到我想要的。我认为问题与“async_reulst.get”有关。get函数似乎在等待创建所有实例。谢谢你的建议。啊,我相信问题是由于使用了星图异步。任何*map*函数都会以正确的顺序返回结果。因此,即使它们是并行执行的,在返回任何值之前都必须首先完成。因此,get将等待所有操作完成。你应该改用apply\u async。哦,我明白了。我将尝试应用异步。我想这可以帮助解决我的问题。谢谢