python - 父进程中断时如何完成子进程的工作?
问题描述
我运行以下代码,我希望子进程在父进程终止时继续完成作业。
我需要子进程来完成每个提交的作业。父进程无关紧要。
import signal
from concurrent.futures import ProcessPoolExecutor
import time
def sub_task(bulks):
def signal_handler(signal, frame):
pass
signal.signal(signal.SIGINT, signal_handler)
for i in bulks:
time.sleep(0.1)
print("Success")
return True
def main():
# it is 40 cores
pool = ProcessPoolExecutor(4)
bulks = []
try:
for i in range(10000):
time.sleep(0.05)
bulks.append(i)
if len(bulks) >= 100:
print("Send")
pool.submit(sub_task, bulks)
bulks = []
if bulks:
pool.submit(sub_task, bulks)
except:
import traceback
traceback.print_exc()
pool.shutdown(wait=True)
return True
main()
但得到了这个例外:
Send
Send
Success
Send
^CProcess ForkProcess-4:
Traceback (most recent call last):
File "/usr/lib/python3.8/multiprocessing/process.py", line 315, in _bootstrap
self.run()
File "/usr/lib/python3.8/multiprocessing/process.py", line 108, in run
self._target(*self._args, **self._kwargs)
File "/usr/lib/python3.8/concurrent/futures/process.py", line 233, in _process_worker
call_item = call_queue.get(block=True)
File "/usr/lib/python3.8/multiprocessing/queues.py", line 97, in get
res = self._recv_bytes()
File "/usr/lib/python3.8/multiprocessing/connection.py", line 216, in recv_bytes
buf = self._recv_bytes(maxlength)
File "/usr/lib/python3.8/multiprocessing/connection.py", line 414, in _recv_bytes
buf = self._recv(4)
File "/usr/lib/python3.8/multiprocessing/connection.py", line 379, in _recv
chunk = read(handle, remaining)
KeyboardInterrupt
Traceback (most recent call last):
File "test1.py", line 37, in main
time.sleep(0.05)
KeyboardInterrupt
谁能帮我吗?
提前致谢
解决方案
推荐阅读
- c++ - 尽管我提供了参数,为什么我在这里得到垃圾值?
- javascript - 是否可以在 Antd 模态标题中添加按钮?
- .htaccess - Mod Rewrite 的 Apache 问题所有 POST 在重写之前已被重定向到 R=501 的 GET
- oracle - Oracle,检查一行是否有更改,然后在数据发生更改时更新
- javascript - 在角度 12 中多次调用 document.readystatechange?
- activemq - ActiveMQ XStream ForbiddenClassException
- javascript - 文本区域大小随浏览器而变化
- visual-studio-code - VSCode cppdbg 在使用“customLaunchSetupCommands”时丢失了选项“args”
- html - 如何修复页脚与部分重叠
- arrays - 如何在 tableView 中显示嵌套的 JSON 数据