Я пытаюсь заставить 3 задания работать друг за другом в последовательности:
Job1 -> Job2 -> Job3
Эти 3 задания определены в operations.py
:
def Job1(x):
return x
def Job2(x):
return x * x
def Job3(x):
print(x)
I 'я вызываю эти задания в script.py
при rq worker
:
from redis import Redis
from rq import Queue
from operation import Job1, Job2, Job3
redis_conn = Redis()
q = Queue(connection=redis_conn)
for num in [1,2,3,4,5,6,7,8]:
j1 = q.enqueue(Job1, num)
j2 = q.enqueue(Job2, j1.result, depends_on = j1)
j3 = q.enqueue(Job3, depends_on = j2)
Согласно документации 1014 *, я ожидаю, что j3 будет ждать j2, который, в свою очередь, должен ждать, пока j1закончить исполнение.Но, вероятно, этого не происходит.Задания, похоже, работают асинхронно.Я так говорю, потому что работник redis выдает это как ошибку:
File "./operation.py", line 5, in Job2
return x * x
TypeError: unsupported operand type(s) for *: 'NoneType' and 'NoneType'
j2 вместо ожидания результата j1 также запускается асинхронно и, поскольку к тому времени результат j1 не готов, j1.result равен None, чтоперешел на J2.Что не так с моим подходом?Почему задания не выполняются последовательно?