首页 > 解决方案 > 防止进程从 ProcessPoolExecutor BrokenProcessPool 添加

问题描述

我在 ProcessPoolExecutor 中使用提交,如下所示:

process_pool = ProcessPoolExecutor(max_workers=NUM_OF_WORKERS)

def main_loop(env_tables_dict):
    for table_type in TABLE_TYPES:
        for node in nodes:
            key = os.path.join(node, table_type)
            if key not in env_tables_dict or (key in env_tables_dict and env_tables_dict[key].done()):
                log(f'submit process task handle_sstable_group_files_per_node: {key}')
                env_tables_dict[key] = process_pool.submit(handle_sstable_group_files_per_node, node, table_type)

一切都在__name__无限循环下运行:

def main():
    log('starting main')
    env_tables_dict = {}
    envs = get_envs()
    for env in envs:
        env_base_dir = get_env_base_dir(env)
        log(f'delete base dir {env_base_dir}')
        delete_dir_if_exits(env_base_dir)
    while True:
        main_loop(env_tables_dict)
        log(f'sleeping: {INTERVAL_TIME}')
        time.sleep(INTERVAL_TIME)


if __name__ == '__main__':
    try:
        main()
    finally:
        process_pool.shutdown()
        thread_pool.shutdown()

一切都在运行:

while true; do python3 main_wish.py; sleep 10; done > out.log 2> err.log

所以当我想结束程序时,我使用 command+c 并且当我这样做时,运行期间创建的每个进程都会保留,所以在几次运行后,我得到 BrokenProcessPool 任何方式让代码处理剩余进程?或者打印一个好的日志让我知道它的问题谢谢!

标签: pythonmultiprocessing

解决方案


推荐阅读