我试图使用django_rq在redis中排队基本工作,line是一个用于排队作业并在后台处理工作的python库,但简单的调用会抛出:
AttributeError: 'dict' object has no attribute '__module__'
我已将此问题追溯到rq库中的{{3}}:
if not isinstance(f, string_types) and f.__module__ == '__main__':
raise ValueError('Functions from the __main__ module cannot be processed '
'by workers.')
我在[{1}}中传递了一个函数,所以我不明白它如何在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尚未使用
答案 0 :(得分:6)
您正在调用该函数并将函数调用的结果传递给队列。
注册函数而不调用它,并包含要在 被调用时传递的参数:
django_rq.enqueue(create_order_ordrin, foo, bar=baz)
,它将被称为create_order_ordrin(foo, bar=baz)
。