繁体   English   中英

如果使用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必须检查是否有脚本发送给他一个字符串'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循环。 将接收到的字符串作为条件实际上并没有做任何事情。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM