Python线程 - 阻塞操作 - 终止执行

时间:2015-09-18 10:38:14

标签: python multithreading

我有一个像这样的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

上使用阻止线程终止程序

1 个答案:

答案 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)