我有一个像这样的python程序:
from threading import Thread
def foo():
while True:
blocking_function() #Actually waiting for a message on a socket
def run():
Thread(target=foo).start()
run()
由于在运行KeyboardInterrupt
的线程有机会终止之前主线程退出,因此该程序不会以foo()
终止。我尝试在调用while True
之后只运行run()
循环来保持主线程处于活动状态但是也没有退出程序(blocking_function()
只是阻止线程运行我猜,等待信息)。还尝试在主线程中捕获KeyboardInterrupt异常并调用sys.exit(0)
- 同样的结果(我实际上希望它杀死运行foo()
的线程,但显然它没有)
现在,我可以简单地暂停执行blocking_function()
,但这并不好玩。我可以在KeyboardInterrupt
或类似的东西上取消阻止它吗?
主要目标:在Ctrl+C
答案 0 :(得分:1)
可能只是一种解决方法,但您可以使用thread
代替threading
。这不是真的建议,但如果它适合你和你的程序,为什么不。
您需要保持程序正常运行,否则线程会在run()
import thread, time
def foo():
while True:
blocking_function() #Actually waiting for a message on a socket
def run():
thread.start_new_thread(foo, ())
run()
while True:
#Keep the main thread alive
time.sleep(1)