0

更新:我发现程序的源代码挂了。在我的 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")不会打印,但如果我单击列表中第二项的按钮,它会打印。

谁能帮助解释这种奇怪的行为?

编辑:最终的印刷品也永远不会印刷

4

0 回答 0