如何阻止多处理在退出时发送垃圾邮件?



我确信这真的很容易,但我找不到关于它的问题。

我有一堆进程在池中运行;当按下ctrl+c时,我希望程序干净地停止和退出,而不会为每个关闭的进程发送"None"垃圾邮件。

给定以下测试代码:

#! /usr/bin/env python3
import multiprocessing
import signal
def graceful_close(blah, blah2):
exit()
signal.signal(signal.SIGINT, graceful_close)
def wait():
while True:
pass
try:
pool = multiprocessing.Pool(20)
for i in range(1, 20):
pool.apply_async(wait)
while True:
pass
except KeyboardInterrupt:
exit()

如何防止输出:

[-2019-09-15 21:56:06 ~/git/locane $> ./test_mp_exit_spam.py
^CNone
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
[-2019-09-15 21:56:11 ~/git/locane $>

到底是什么原因造成的?

请使用sys.exit而不是exit

exit是交互式 shell 的帮助程序 - sys.exit 旨在用于程序。

而且由于您已经在处理SIGNINT,不确定为什么需要显式处理KeyboardInterrupt

import sys
import multiprocessing
import signal
def graceful_close(blah, blah2):
sys.exit()
signal.signal(signal.SIGINT, graceful_close)
def wait():
while True:
pass
pool = multiprocessing.Pool(20)
for i in range(1, 20):
pool.apply_async(wait)
while True:
pass

相关内容

  • 没有找到相关文章

最新更新