Я написал скребок, который запускает скрипт на питоне через сельдерея для рабочего.Я использую 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.Кажется, это не так.Это потому, что я использую подпроцесс?Если это так, я должен просто импортировать свой скрипт как модуль и передать ему аргументы?