0
我產生了幾個multiprocessing.Process
es分擔工作量到不同的過程。 現在我希望能夠通過按Ctrl-C關閉整個程序,但是信號只發送給孩子而不發送給父進程。信號由孩子處理,但不是由父進程處理?
我的程序是這樣的:
import sys
import multiprocessing
import signal
# ignoring handler, signal.SIG_IGN is not working on windows
def sighandler(signal, frame):
pass
# worker thread definiton
def worker():
signal.signal(signal.SIGINT, sighandler)
signal.signal(signal.SIGTERM, sighandler)
# do stuff here...
def main():
num_procs = 4
procs = []
print("Starting up %d processes:" %num_procs)
for i in range(num_procs):
print("\tstarting worker %d..." %(i+1))
p = multiprocessing.Process(target=worker)
procs.append(p)
p.start()
print("All processes started...")
try:
for p in procs:
p.join()
except KeyboardInterrupt as e:
print "STOPPING"
for p in procs:
p.terminate()
sys.exit(0)
但只有sighandler被稱爲4倍,如果我按Ctrl-C。當我在父進程中註冊信號時,處理程序不會被調用,KeyboardInterrupt異常也不會起作用。 我可以停止從內部的子進程嗎?處理程序內部的sys.exit(0)
不適用於我。
很好,有趣的是,如果我這樣做在信號處理程序,即使是'KeyboardInterrupt'完美地處理... – reox