有没有办法知道 pathos/multiprocessing 工人已经完成?
Is there a way to know that a pathos/multiprocessing worker is finished?
我想知道工作人员何时完成,以便我可以释放资源作为任何工作人员的最后行动。或者,我也可以在主进程中释放这些资源,但我需要在每个工人之后一个一个地释放这些资源(与在所有工人完成后释放一次相反)。
我是 运行 我的工作人员,如下所示,跟踪进度和使用的 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
由于负载平衡,很难知道哪个工作将在一个工人身上。有什么办法可以知道一些工人已经不活跃了?
我正在使用 pathos 版本 0.2.0。
我是 pathos
作者。如果您需要在 Pool
中的每个 worker 完成 运行 后释放资源,我建议您不要使用 Pool
。 Pool
意味着分配资源,并继续使用它们直到所有作业完成。我的建议是使用生成 Process
的 for 循环,然后确保在完成后加入生成的 Process
。如果您需要在 pathos
内执行此操作,Process
class 位于可怕的名称:pathos.helpers.mp.Process
(或者更直接地位于 multiprocess.Process
来自 multiprocess
包)。
我想知道工作人员何时完成,以便我可以释放资源作为任何工作人员的最后行动。或者,我也可以在主进程中释放这些资源,但我需要在每个工人之后一个一个地释放这些资源(与在所有工人完成后释放一次相反)。
我是 运行 我的工作人员,如下所示,跟踪进度和使用的 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
由于负载平衡,很难知道哪个工作将在一个工人身上。有什么办法可以知道一些工人已经不活跃了?
我正在使用 pathos 版本 0.2.0。
我是 pathos
作者。如果您需要在 Pool
中的每个 worker 完成 运行 后释放资源,我建议您不要使用 Pool
。 Pool
意味着分配资源,并继续使用它们直到所有作业完成。我的建议是使用生成 Process
的 for 循环,然后确保在完成后加入生成的 Process
。如果您需要在 pathos
内执行此操作,Process
class 位于可怕的名称:pathos.helpers.mp.Process
(或者更直接地位于 multiprocess.Process
来自 multiprocess
包)。