Python RQ队列调用enqueue报错:'tuple'对象没有__module__属性如何解决
错误原因
rq 队列的enqueue方法第一个入参要求为未执行的函数对象本身,你当前transmitter.py第23行的写法是直接执行了testPost(address, 0),将函数返回的三元组传给了enqueue。rq 内部解析参数时会尝试读取第一个入参的__module__属性,而元组没有该属性,因此触发AttributeError。
修复方案
直接修改transmitter.py中的testQueue函数即可,正确的enqueue传参方式为:第一个参数传入函数名(不要加括号执行),函数调用的参数放在args参数中传递:
def testQueue(address): # 仅传递函数对象testPost,参数通过args元组传入 result = globe.queue.enqueue(testPost, args=(address, 0)) return result
附加注意事项
- 任务提交后需要启动rq worker进程才会执行队列中的任务,在项目根目录执行命令:
rq worker - 若需要获取任务执行结果,需要等待任务执行完成后读取任务对象的
return_value属性,示例如下(修改test2.py对应逻辑):
import time # 其余导入代码不变 if __name__ == "__main__": result1 = trans.testPost(baseReceiverAddress + '/test', 0) print(result1) result_job = trans.testQueue(baseReceiverAddress + '/testQueue') # 等待任务执行完成 while not result_job.is_finished: time.sleep(0.1) print(result_job.return_value)
内容的提问来源于stack exchange,提问作者BlaBla
相关产品推荐
相关产品推荐

