【发布时间】:2019-10-19 00:51:35
【问题描述】:
我正在尝试让 3 个作业按顺序依次运行:
Job1 -> Job2 -> Job3
这 3 个工作在 operations.py 中定义:
def Job1(x):
return x
def Job2(x):
return x * x
def Job3(x):
print(x)
我在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)
根据documentation,我希望 j3 等待 j2,而 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 是传递给 j2 的 None。我的方法有什么问题?为什么作业不是按顺序运行的?
【问题讨论】:
标签: python python-3.x redis queue python-rq