gpt4 book ai didi

python - python中环算法中的 token 传递

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:07:16 26 4
gpt4 key购买 nike

我正在尝试实现 token 传递的环形算法。该算法稍后将使用集群中的不同节点进行测试。我是 python 和网络编程的新手。我想从简单开始,在环中有两个节点。只要 token 值等于节点号,一个节点就会将 token 发送给另一个 token ,否则,节点将等待 token 。所以在我的代码中,节点 1 启动,节点 2 等待 token ,它应该循环。我的代码只工作了 2 轮!我知道连接有问题(打开和关闭它)。我每次都会关闭连接,但如果您知道该怎么做,它可以保持打开状态。那么我怎样才能改变它的方式,让它尽可能多地循环,而不仅仅是 2 轮!这就是我运行它的方式:我运行节点 1 代码,然后运行节点 2但最终,应该只有一个代码在任何节点上运行!我们将不胜感激任何帮助和建议。

#node 1
import socket
import time

s = socket.socket()
ss = socket.socket()
host = socket.gethostname()
other_port = 12345
my_port= 5454
token = 1
time.sleep( 5 ) #to wait to other node to run the program
while True:
print "node 1 is here"
if token != 1:
while True:
s.bind((host, my_port))
s.listen(5)
c, addr = s.accept()
print 'Node 1 Got connection from', addr
data = c.recv(1024)
if int(data) == 1:
print "ifffffffffff node 1"
token = 1
c.close()
break
else:
ss.connect((host, other_port))
token = token+1
ss.sendall('2')
print "Node 1 sent the",token
ss.close()

和:

#node 2
import socket
import time

s = socket.socket()
ss = socket.socket()
host = socket.gethostname()
my_port = 12345
other_port = 5454
token = 1
while True:
if token != 2:
while True:
s.bind((host, my_port))
s.listen(5)
c, addr = s.accept()
print 'node 2 Got connection from', addr
data = c.recv(1024)
if int(data) == 2:
token = 2
c.close()
break
else:
ss.connect((host, other_port))
token = token-1
ss.sendall('1')
print "Node 2 sent the",token
ss.close()

最佳答案

我使用 UDP 而不是 TCP 来解决我的问题。这是我在 python 中做的:关于环中节点的组织方式、 token 何时传递、 token 号如何更改以及所有进程何时终止,存在一些要求。我只是添加了代码来显示我使用的 UDP 的逻辑。

address = socket.gethostname()                                                            
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
has_token = False
token = 1
if id == 1:
has_token = True
token = random.randrange(1,11,1)
time.sleep( 5 )
s.bind((address, port))
while token < max_token:
while not has_token:
data_token, addr = s.recvfrom(8192)
if data_token:
has_token = True
token = int(data_token)
if (token % 7) != id:
token = increment_token(token)
s.sendto(str(token),(next_address,next_port))
has_token = False
else:
token = set_random_token(token)
s.sendto(str(token),(next_address,next_port))
has_token = False

关于python - python中环算法中的 token 传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21191177/

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