2014-04-12 398 views
0

我在一個在線遊戲中使用芹菜和Django。用戶建造各種類型的船隻,並且任務被設置爲在一定時間之後提供它們。芹菜任務執行不正確

舉個例子:

def buildfighter(world, amount): 
    world.shipyardsinuse = F('shipyardsinuse') + 1*amount 
    world.save() 
    newtask.buildfighter.apply_async(args=(world.worldid,amount), eta=outcometime) 

我的實際任務的代碼,待1個小時後執行:

def buildfighter(worldno, amount): 
    world = World.objects.get(worldid=worldno) 
    world.fighters = F('fighters') + amount 
    world.shipyardsinuse = F('shipyardsinuse') - 1*amount 
    world.save() 

任務提供這種船隻和釋放的船廠。

我總是收到偶爾報告用戶遇到被封鎖的造船廠和失蹤船舶通過eta,併爲我的生活我不明白爲什麼!我已經建立了芹菜攝影機,當我回去檢查那些失蹤的任務時,他們都顯示爲SUCCEEDED

我settings.py的芹菜部分:

import djcelery 
djcelery.setup_loader() 

BROKER_URL = "amqp://guest:[email protected]:5672//" 
CELERY_IMPORTS = ("wawmembers.tasks",) 
CELERY_RESULT_BACKEND='djcelery.backends.database:DatabaseBackend' 
CELERY_TASK_RESULT_EXPIRES = 14400 
CELERY_DISABLE_RATE_LIMITS = True 

誰能幫助?

回答

0

兩個建議:

  1. 使用一些日誌記錄,以檢查您的任務被調用。你可以使用redis或memcache或類似的東西來實現一些簿記。我知道這是檢查消息代理,但它會讓你確認你的任務確實被調用。

  2. 這可能是你的數據庫查詢

    世界= World.objects.get(的WorldID = worldno) 帶給您老的效果,因爲它使用了一些現有的事務。試着打印一下你得到的結果,以驗證是否屬實。您可以在閱讀之前嘗試寫入來強制新的事務。請注意,如果您的數據庫連接閒置時間過長,django 1.6可能會出現問題。