Python RQ 属性错误:'dict'对象没有'__module__'属性
我正在尝试使用django_rq这个Python库在Redis中添加一个简单的任务,这个库可以把任务放到队列里,并让后台的工作程序处理它们。但是,当我简单调用的时候却出现了一个错误:
AttributeError: 'dict' object has no attribute '__module__'
if not isinstance(f, string_types) and f.__module__ == '__main__':
raise ValueError('Functions from the __main__ module cannot be processed '
'by workers.')
我把一个函数作为f
传进去,所以我不明白为什么会在一个dict
上出现属性错误。有人知道问题出在哪里吗?
错误追踪信息:
File "/Users/admin/dev/feedme-web/feedme/api/views.py", line 133, in post
parameter_dict = {
File "/Users/admin/dev/feedme-web/feedme-env/lib/python2.7/site-packages/django_rq/queues.py", line 162, in enqueue
return get_queue().enqueue(func, *args, **kwargs)
File "/Users/admin/dev/feedme-web/feedme-env/lib/python2.7/site-packages/rq/queue.py", line 159, in enqueue
if not isinstance(f, string_types) and f.__module__ == '__main__':
正在添加到队列的函数:
def create_order_ordrin(user, card_primary_key, address_primary_key):
parameter_dict = {
"""... pararmeters for call here ..."""
}
ordrin = initialize_ordrin()
return ordrin.order_user(**parameter_dict)
*
注意,值user、card_primary_key和address_primary_key还没有被使用
1 个回答
9
你正在调用一个函数,并把这个函数的结果传递给队列。
你需要先注册这个函数,而不是直接调用它,并且在它被调用时要包含要传递的参数:
django_rq.enqueue(create_order_ordrin, foo, bar=baz)
这样它会被调用为 create_order_ordrin(foo, bar=baz)
。