只要使用 zmq 从另一个脚本接收到正确数据,如何将数据发送到一个脚本
How to send data to one script for as long as correct data from another script is being received using zmq
大家好,我真的需要你们的帮助或指导来解决这个问题。
鉴于我有 3 个 python 脚本
script1.py
script2.py
script3.py
我需要的是 script1.py 发送一个字符串 'True' 到 script2.py。
然后script2.py必须发送一个字符串到script3.py。
同时script2.py必须检查script1.py是否向他发送了一个字符串'False'。
如果发生这种情况,script2.py 必须停止向 script3.py
发送任何数据
我正在使用 pyzmq,因为我认为它会满足我的需要。我不想使用 Flask 或 socketsio。
我看过多处理和多线程,但我不确定那是否是我应该转向的方向。我曾尝试使用 while 循环来不断检查从一个脚本发送到另一个脚本的值,但这并不是很好。
有没有办法只使用 pyzmq 来做到这一点,或者我应该使用多处理或多线程之类的东西吗?
提前致谢
编辑:试图给出更好的解释。
这是script2.py。它通过端口 5555 从 script1.py 获取数据,并通过 运行 函数 get() 通过端口 5556 将其他数据发布到 script3.py。此时我认为data1是来自script1.py的输入。我想一直检查 script1.py 是否向我发送停止向 script3.py 发布数据的信号。
有没有办法在不使用并行计算的情况下使用 pyzmq 来做到这一点?
#script2.py
from time import sleep
import random
import zmq
def get():
estimated = ()
on = ()
i = 0
while i<10:
now = random.uniform(10, 15)
estimated += (now,)
on += (0.85 * now,)
sleep(1)
i += 1
data_package = {'Estimated ': estimated, 'Actual': on}
return data_package
context = zmq.Context()
socket_1 = context.socket(zmq.SUB)
socket_1.setsockopt(zmq.SUBSCRIBE, b'status')
socket_1.connect("tcp://localhost:5555")
print('Connected to port 5555')
topic1 = socket1.recv_string()
data1 = socket1.recv_string() # may be a pyobj as well
socket2 = context.socket(zmq.PUB)
socket2.bind("tcp://*:5556")
print('Connected to port 5556')
while True:
socket_2.send_string('topic2', zmq.SNDMORE)
socket_2.send_pyobj(get())
print("dictionary sent")
现在它只是无休止地运行 while 循环。将接收到的字符串作为条件并没有真正做任何事情。
我实际上结束了使用多处理。它做我想做的,关闭问题。可能确实很广泛。
大家好,我真的需要你们的帮助或指导来解决这个问题。
鉴于我有 3 个 python 脚本
script1.py
script2.py
script3.py
我需要的是 script1.py 发送一个字符串 'True' 到 script2.py。
然后script2.py必须发送一个字符串到script3.py。
同时script2.py必须检查script1.py是否向他发送了一个字符串'False'。
如果发生这种情况,script2.py 必须停止向 script3.py
发送任何数据我正在使用 pyzmq,因为我认为它会满足我的需要。我不想使用 Flask 或 socketsio。
我看过多处理和多线程,但我不确定那是否是我应该转向的方向。我曾尝试使用 while 循环来不断检查从一个脚本发送到另一个脚本的值,但这并不是很好。
有没有办法只使用 pyzmq 来做到这一点,或者我应该使用多处理或多线程之类的东西吗?
提前致谢
编辑:试图给出更好的解释。
这是script2.py。它通过端口 5555 从 script1.py 获取数据,并通过 运行 函数 get() 通过端口 5556 将其他数据发布到 script3.py。此时我认为data1是来自script1.py的输入。我想一直检查 script1.py 是否向我发送停止向 script3.py 发布数据的信号。
有没有办法在不使用并行计算的情况下使用 pyzmq 来做到这一点?
#script2.py
from time import sleep
import random
import zmq
def get():
estimated = ()
on = ()
i = 0
while i<10:
now = random.uniform(10, 15)
estimated += (now,)
on += (0.85 * now,)
sleep(1)
i += 1
data_package = {'Estimated ': estimated, 'Actual': on}
return data_package
context = zmq.Context()
socket_1 = context.socket(zmq.SUB)
socket_1.setsockopt(zmq.SUBSCRIBE, b'status')
socket_1.connect("tcp://localhost:5555")
print('Connected to port 5555')
topic1 = socket1.recv_string()
data1 = socket1.recv_string() # may be a pyobj as well
socket2 = context.socket(zmq.PUB)
socket2.bind("tcp://*:5556")
print('Connected to port 5556')
while True:
socket_2.send_string('topic2', zmq.SNDMORE)
socket_2.send_pyobj(get())
print("dictionary sent")
现在它只是无休止地运行 while 循环。将接收到的字符串作为条件并没有真正做任何事情。
我实际上结束了使用多处理。它做我想做的,关闭问题。可能确实很广泛。