параллельный запуск кода в python (библиотека pika) - PullRequest
0 голосов
/ 09 марта 2020

У меня есть приемник pika, который получает команды и выполняет другой сценарий python. проблема в том, что я не могу запустить скрипт параллельно как многопроцессорный или многопоточный. если я получаю команду через протокол mqtt, она ждет, пока не завершит функцию «make.py», чтобы выполнить ее снова. я хотел, чтобы он работал параллельно. кто-то может помочь?

def call_mkdt(ch, method, properties, body):
    os.system(f"make.py {body}")


def consume():
    channel.basic_consume(queue='UploadCompleted', on_message_callback=call_mkdt, auto_ack=True)
    print(' [*] ETL')
    try:
        channel.start_consuming()
    except KeyboardInterrupt:
        channel.stop_consuming()

if __name__== "__main__":
    p1 = threading.Thread(name="Hello1", target=consume)
    p1.start()

1 Ответ

1 голос
/ 09 марта 2020

Полагаю, вы не хотите ждать, пока make.py завершит sh выполнение. Вы можете использовать функцию subprocess.Popen из python subprocess модуля.

Вы можно узнать больше о функции Popen в документах

Заменить:

def call_mkdt(ch, method, properties, body):
    os.system(f"make.py {body}")

С:

import subprocess

def call_mkdt(ch, method, properties, body):
    subprocess.Popen(["make.py", f"{body}"])
...