[英]Terminating thread thats waiting in python
我正在尝试学习如何在网络中使用线程,并且如果连接关闭,则需要停止线程。 我有一个多个连接的列表和一个检查它们是否仍然打开的线程。
如果连接已关闭,我需要终止 GetData() 线程,但如果不检查每个循环的退出事件,我不知道该怎么做。 问题是 GetData() 线程没有循环,而是位于第 25 行并等待响应。 如果连接已关闭,它永远不会得到响应,只会一直坐在那里,直到我终止程序。
我如何杀死线程外的线程。 我知道这不是通过线程轻松完成的,但是否有其他库允许这样做? 我也尝试使用多处理,但我无法让它工作,所以我放弃了。
from threading import Thread
import socket
def MakeSocket():
try:
global MainSocket
MainSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print ("Socket successfully created")
except socket.error as err:
print ("socket creation failed with error %s" %(err))
MainSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
MainSocket.bind(('', 1337))
MainSocket.listen(5)
global c
global addr
c, addr = MainSocket.accept()
Thread(target=GetData, args=()).start()
Thread(target=CheckIfOpen, args=()).start()
def GetData():
while True:
try:
#Try to recieve data from connection.
RecievedData = c.recv(4096).decode()
print(RecievedData)
except:
print ("\nError: GetData failed.\n")
return
def CheckIfOpen():
while True:
#wait 5 sec between each test
time.sleep(5)
try:
#try to send data "test".
c.send("test".encode())
except:
#if it fails then the connection has been closed. Close the GetData thread
#Don't know how to close the GetData thread
MakeSocket()
我知道这看起来很傻,但这并不是我的全部代码。 我只是对其进行了一些更改,并包括了重要的部分。 它仍然包含相同的问题。 我的实际代码中没有所有这些全局变量。
我意识到出了什么问题。 https://reddit.com/r/learnpython/comments/kx925z/terminating_thread_thats_waiting/
u/oefd 指出了我在评论中遗漏的一些东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.