Как отправить данные в один скрипт до тех пор, пока с помощью zmq принимаются правильные данные из другого скрипта - PullRequest
0 голосов
/ 25 апреля 2019

Привет, парни и девушки, я действительно могу использовать вашу помощь или руководство по этой проблеме.

Учитывая, что у меня есть 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 и публикует другие данные через порт 5556 в script3.py, выполняя функцию get ().В этот момент я думал, что 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.Помещение полученной строки в качестве условия на самом деле ничего не делает.

1 Ответ

0 голосов
/ 29 апреля 2019

Я фактически прекратил использовать многопроцессорность.Это делает то, что я хочу, закрывая вопрос.Вероятно, было действительно широким.

...