我正在尝试编写一个Python多线程脚本,它在不同的线程中完成以下两件事:
以下是一种简单的方法。它适用于我:
from multiprocessing import Process
import time
def child_func():
while not stop_thread:
time.sleep(1)
if __name__ == '__main__':
child_thread = Process(target=child_func)
stop_thread = False
child_thread.start()
time.sleep(3)
stop_thread = True
child_thread.join()
但是出现并发症是因为实际上,而不是child_func()
中的while循环,我需要运行一个长时间运行的进程,除非被Ctrl-C杀死,否则它不会停止。所以我无法定期检查stop_thread
的值。那么我怎么能告诉我的孩子过程在我想要的时候结束呢?
我相信答案与使用信号有关。但我还没有看到如何在这种情况下使用它们的好例子。有人可以通过修改上面的代码来帮助使用信号在Child和Parent线程之间进行通信。如果用户按Ctrl-C,则使子线程终止。
答案 0 :(得分:1)
除非您想要对子进程进行清理,否则无需在此处使用signal
模块。可以使用terminate
方法停止任何子进程(与SIGTERM
具有相同的效果)
from multiprocessing import Process
import time
def child_func():
time.sleep(1000)
if __name__ == '__main__':
event = Event()
child_thread = Process(target=child_func)
child_thread.start()
time.sleep(3)
child_thread.terminate()
child_thread.join()
文档在这里:https://docs.python.org/2/library/multiprocessing.html#multiprocessing.Process.terminate