python - 防止进程从 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 任何方式让代码处理剩余进程?或者打印一个好的日志让我知道它的问题谢谢!
解决方案
推荐阅读
- php - 使用 Guzzle 时 Laravel 通知不起作用
- xml - 在 XSL 中使用时区格式化日期
- wordpress - 用于从网络成员登录区域发送安全邮件/或消息的 Wordpress 插件
- reactjs - 如何为谷歌材料条形图制作动画
- spring - 跨多个过滤器在 Spring Cloud 网关中维护状态/上下文
- powershell - PowerShell - 删除 IP - 使用 Remove-NetIPAddress 的地址
- java - 无效的 Java 语句
- angular - 431 使用查询参数的请求标头字段太大
- python - 定向梯度直方图(HOG)描述符的最小图像尺寸是多少?
- python-3.x - Django - 检查 cookie 的“SameSite”属性