如何在使用zmq从另一个脚本接收正确数据的情况下向一个脚本发送数据

2022-09-28 21:21:07 发布

您现在位置:Python中文网/ 问答频道 /正文

大家好,在这个问题上,我真的需要你们的帮助或指导

假设我有3个python脚本

script1.py

script2.py

script3.py

我需要的是script1.py向script2.py发送一个字符串“True”

然后script2.py必须向script3.py发送一个字符串

同时,script2.py必须检查script1.py是否向他发送字符串“False”

如果发生这种情况,script2.py必须停止向script3.py发送任何数据

我正在使用pyzmq,因为我认为它将满足我的需要。我不想用烧瓶或袜子

我已经研究了多处理和多线程,但我不确定这是否是我应该转向的方向。我曾尝试使用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循环。将接收到的字符串作为一个条件实际上并没有做任何事情


Tags: 数据方法字符串pyimport脚本getsocketpyzmqzmqwhileestimatedscript2script1script3

热门问题