我想知道工人何时完成,以便我可以将资源释放为任何工人的最后一个动作。另外,我也可以在主过程中释放这些资源,但是我需要在每个工人一个一个工人一个一个工人之后释放这些资源(与所有工人完成后一次释放它们相反(。
我正在按照下面的工作人员运行我的工人,跟踪进度和使用的PID:
from pathos.multiprocessing import ProcessingPool
pool = ProcessingPool(num_workers)
pool.restart(force=True)
# Loading PIDs of workers with my get_pid() function:
pids = pool.map(get_pid, xrange(num_workers))
try:
results = pool.amap(
exec_func,
exec_args,
)
counter = 0
while not results.ready():
sleep(2)
if counter % 60 == 0:
log.info('Waiting for children running in pool.amap() with PIDs: {}'.format(pids))
counter += 1
results = results.get()
# Attempting to close pool...
pool.close()
# The purpose of join() is to ensure that a child process has completed
# before the main process does anything.
# Attempting to join pool...
pool.join()
except:
# Try to terminate the pool in case some worker PIDs still run:
cls.hard_kill_pool(pids, pool)
raise
由于负载平衡,很难知道哪个工作将是工人的最后一项。有什么办法知道某些工人已经不活动了吗?
我正在使用悲伤版本0.2.0。
我是pathos
作者。如果在运行Pool
中的每个工人之后需要释放资源,我建议您不要使用Pool
。Pool
旨在分配资源,并继续使用它们,直到完成所有作业为止。我建议的是使用一个循环,该循环产生Process
,然后确保在完成时将卵形 Process
连接在一起。如果您需要在pathos
中执行此操作,则Process
类位于可怕的命名:pathos.helpers.mp.Process
(或更直接从multiprocess
的CC_11套件(。