更新:我发现程序的源代码挂了。在我的 pdthread 中,它调用mysocket1.sendall(mydata). 它似乎无法超越这一点。有谁知道为什么这可能是一个问题?
我有以下代码:
mysocket1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mysocket1.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
mysocket1.connect(('127.0.0.1', 10001))
while mysocket1:
try:
msg = mysocket1.recv(4092)
msg = pickle.loads(msg)
print(msg)
for pd in pd_objects:
if msg[0] == pd.cam_ip and str(msg[1]) == 'ON' and pd.pd_active == False:
pd.pd_active = True
pdthread = Thread(target=get_pd_data(pd.cam_ip))
pdthread.daemon = True
pdthread.start()
print("testing1")
elif msg[0] == pd.cam_ip and msg[1] == 'OFF':
pd.pd_active = False
print("testing else")
print("testing2")
except:
traceback.print_exc(file=sys.stdout)
break
print("reached end")
我在另一端连接了另一个 python 程序。当我第一次按下按钮激活它时,它会完美连接并运行。我在 pdthread 中发送了我的数据,并且所有工作都在膨胀。这就是后来发生的事情,这就是问题所在。未来的按钮按下不会被这侧拾取。数据从另一端通过套接字发送得很好,只是这里没有接收到。
我已经打印了一些打印件进行测试,我发现了一些我无法解释的有趣的事情,这就是我在这里问的原因:
print("testing1")从不打印。曾经。即使在第一次成功点击之后也不会。这让我觉得这pdthread.start()就像pdthread.join()......这让我感到困惑。
print("testing else")从不打印。考虑到我的测试,这是预期的,但我想排除它。
这是最奇怪的一个。我的 pd_objects 列表中有两个项目。当我单击发送pd.cam_ip第一项的按钮时,print("testing2")不会打印,但如果我单击列表中第二项的按钮,它会打印。
谁能帮助解释这种奇怪的行为?
编辑:最终的印刷品也永远不会印刷