gpt4 book ai didi

Python套接字未接收消息

转载 作者:太空宇宙 更新时间:2023-11-03 19:22:06 25 4
gpt4 key购买 nike

我正在尝试使用带有套接字的 python 来模拟 token 环,但遇到了问题

主程序

node1 = node.node(8081,8082,token)
node2 = node.node(8082,8083,emptyFrame)
node3 = node.node(8083,8084,emptyFrame)
node4 = node.node(8084,8081,emptyFrame)

node1.firstrun()
node1.start()
node2.start()
node3.start()
node4.start()

节点

class node(threading.Thread):
def __init__(self,s,d,frame):
threading.Thread.__init__(self)
self.dest = d
self.current = frame
self.newframe = frame
self.source = s

def firstrun(self):
time.sleep(1)
host = "localhost"
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(("", self.source))
sendmessage = str(self.newframe.fullFrame())
s.sendto(sendmessage, (host,self.dest))
print "sent"

def run(self):
host = "localhost"
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(("", self.source))
while True:
print "running"
message, addr = s.recvfrom(4096)
self.newframe = message
print "received"

在代码中,我创建了 4 个节点,为它们提供不同的端口,并为其中一个节点提供消息。我让第一个端口向下一个节点发送消息,并且所有节点都运行主函数。在主函数中,我等待消息并执行 while 循环。所有 4 个节点的运行都会打印出来,但接收到的不会打印出来。因此我不明白为什么节点永远不会收到第一个 token 。我的程序只是无限期地等待。(为了清楚起见,我删除了多余的代码,它们都不应该阻碍主套接字进程)

最佳答案

你应该首先分派(dispatch)所有线程,否则没有套接字监听。time.sleep() 是糟糕的编码风格,在线程处理方面不能依赖定时函数。

在某一点调度您的线程。

threads = [node1, node2, node3, node4]
[thread.start() for thread in threads]

并从节点类中抓取 firstrun() 方法,并在 class initnode 中实现它(它不需要是 threading.Thread 的子级) )或者只是在分派(dispatch)套接字线程之后从主发送消息。

关于Python套接字未接收消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9354799/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com