python:如何取消阻止使用recvfrom的脚本

时间:2014-05-14 22:46:53

标签: python sockets python-multithreading

我正在使用客户端通过UDP在python中连接套接字。我有两个主题。在KeyboardInterrupt之后,第一个线程仍然在等待通过recvfrom的连接。

(...)

udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

(...)

udp.shutdown(socket.SHUT_RDWR) # Does not work
udp.close() # Does not work

我有一个全局变量,所有线程共享,我在KeyboardInterrupt之后更新此值。但线程没有关闭。

如何退出此帖子?

提前致谢。

1 个答案:

答案 0 :(得分:2)

您可能需要做一些澄清,但这是我从您的问题中理解的。如果你的KeyboardInterrupt杀死了第一个线程,并且你需要配对的线程来关闭,那么你应该考虑使用daemon thread.这将保证一旦父线程完成这些线程的结束。但是,如文档中所述:

  

守护程序线程在关闭时突然停止。他们的资源(例如打开文件,数据库事务等)可能无法正确发布。如果您希望线程正常停止,请使它们成为非守护进程并使用合适的信号机制,例如事件。

Events只不过是线程之间要使用的信号。就像状态标志一样,您可以检查事件是否已经设置为'并在完成线程内执行之前采取适当的预防措施来处理资源。