我有一个程序处理网络中的一些设备。程序为每个设备和每个进程运行创建一个进程插座.recv在循环中运行以从连接的设备接收消息。 当我关闭设备然后再打开它时,程序和设备之间的连接将丢失,但recv函数不会返回任何东西或引发任何异常,进程将被阻止。 如何处理这个问题 这是我的密码:
if __name__ == '__main__':
ip = sys.argv[1]
port = sys.argv[2]
pingInterval = float(sys.argv[3])
deviceId = sys.argv[4]
print("A card reader started for ", ip)
Thread(target=setThePingerThread, args=(pingInterval,)).start()
while True:
clientsock = socket (AF_INET, SOCK_STREAM)
connectionSuccessful = False
while not connectionSuccessful:
try:
clientsock.connect((ip, int(port)))
connectionSuccessful = True
print('socket connected to ', ip, port)
except Exception as e:
print('Can''t connect to the device! device ip =>', ip)
time.sleep(5000)
pass
try:
mybuffer = bytes()
data = bytes()
cardNumbers = []
while True:
mybuffer = clientsock.recv(100)
data = data + mybuffer
cardNumbers, data = retreiveCardNumbers(data)
#print('debug: cardNumbers=', cardNumbers, ' data=',data, ' data-decoded=',data.decode("ascii"))
for cardNumber in cardNumbers:
print('A card hit:', cardNumber)
sendToQueue(cardNumber, deviceId)
except Exception as e:
print('Error processing card number! device ip =>', ip, e)
指
我不知道
setThePingerThread
的代码,但我想这个错误可以通过以下方法解决:thread.deamon
通常为False,这使程序等待该线程的结束。你知道吗相关问题 更多 >
编程相关推荐