只要使用 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 循环。将接收到的字符串作为条件并没有真正做任何事情。

我实际上结束了使用多处理。它做我想做的,关闭问题。可能确实很广泛。