2014-03-12 36 views
1

我試圖使用django_rq排隊作業和在後臺處理它們與工作人員,但簡單的調用python庫redis中排列基本工作拋出一個:Python RQ AttributeError:'字典'對象沒有屬性'__module__'

AttributeError: 'dict' object has no attribute '__module__' 

我在rq庫中的問題追蹤到這個line

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) 

*音符值用戶,card_primary_key和address_primary_key沒有被尚未使用

+1

你確定你沒有意外**調用**函數並傳遞函數返回的字典嗎? –

+0

@MartijnPieters你是對的,這就是發生了什麼。但是我怎樣才能使用適當的參數排隊函數而無需調用它? – agconti

回答

6

您呼叫的功能,將函數調用的結果傳遞給隊列。

註冊功能,無需調用它,包括當要調用的參數傳遞:

django_rq.enqueue(create_order_ordrin, foo, bar=baz) 

,它會被稱爲create_order_ordrin(foo, bar=baz)

+0

你的冠軍;這很好。我已經多次閱讀了這部分文檔,但我一直使用'django_rq.enqueue(create_order_ordrin(),foo,bar = baz)'。感謝您直接在這些'()'上。 – agconti

相關問題