有没有办法知道一个病理/多处理工作程序完成了?

2024-04-25 06:04:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道工人们什么时候结束,这样我就可以把资源腾出,作为任何工人的最后一个行动。或者,我也可以在主进程上释放这些资源,但是我需要在每个工人一个接一个地释放这些资源(与所有工人完成一次释放相反)。在

我按以下方式运行我的工人,跟踪进度和使用的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版。在


Tags: oftogetcounter资源resultsnumpids
1条回答
网友
1楼 · 发布于 2024-04-25 06:04:59

我是pathos的作者。如果您需要在Pool中的每个worker完成运行后释放资源,我建议您不要使用PoolPool用来分配资源,并一直使用它们直到所有作业都完成。我建议使用一个for循环来生成Process,然后确保生成的Process在完成后被联接。如果您需要在pathos中执行此操作,Process类位于可怕的名称:pathos.helpers.mp.Process(或者更直接地位于multiprocess包中的multiprocess.Process)。在

相关问题 更多 >