Python: Celery и RabbitMQ не обрабатывают асинхронно - PullRequest
0 голосов
/ 27 ноября 2018

Я написал скребок, который запускает скрипт на питоне через сельдерея для рабочего.Я использую rabbitMQ в качестве брокера.

Если я вызываю 'fire_it_off' в моем Python REPL со страницей, которую я хочу указать в качестве аргумента (т. Е. 'Www.example.com'), я заметил, что мои задания выполняются синхронно, а не асинхронно.Это почему?

from celery import Celery
import os
import subprocess


app = Celery('tasks', broker='amqp://<user>:<pw>@<hostname>:/<vhost_name>')


@app.task
def whoami():
    test = os.system('whoami')
    print(test, 'is your new worker')
    return os.system('whoami')    

@app.task
def fire_it_off(in_args):
    try:
        status = 'Complete'
        # time.sleep(5)
        print('executing {0} script with the following args: {1}'.format('parser.py', in_args))
        p = subprocess.Popen(['python3.6', 'parser.py', in_args])
        print(p)
        p.wait()
        return status
    except Exception as error:
        return error, 'Not Complete'

Я предполагал, что даже если бы я вызвал скрипт на python с подпроцессом и использовал p.wait(), я мог бы обрабатывать задания FIFO.Кажется, это не так.Это потому, что я использую подпроцесс?Если это так, я должен просто импортировать свой скрипт как модуль и передать ему аргументы?

...