2012-03-30 54 views
2

使用Django在後臺執行作業的小應用程序(主要是cron樣式,但也是用戶啓動的)。
        免責聲明:這是我與celeryd第一次遇到,建立迄今從文檔和示例使用Django的TransactionManagementError使用sqlite後端

我使用Django 1.3,celeryd 2.5,Django的芹菜2.5.1,和sqlite3的。
我還處於測試階段,所以我沒有調用真正的任務,而只是打印出消息。

我有一個cron風格的任務:

@periodic_task(run_every=crontab(hour="*", minute="*", day_of_week="*")) 
def test(): 
    print "firing test task"

,這將是用戶發起的另一項任務:

@task(name="myapp.tasks.user_task") 
def user_task(country): 
    print "performing task for: "+country

這個cron風格的任務只會每天一次運行,而其他將謹慎執行
        (從平均每天0到30次)

我使用SQLite作爲我的後端和我的芹菜設置爲:

# Celery 
INSTALLED_APPS += ("djcelery",) 

import djcelery 
djcelery.setup_loader() 

BROKER_URL = "django://" 
BROKER_POOL_LIMIT = None 
CELERYD_CONCURRENCY = 1

我運行到,這不應該發生的問題,反而會因爲它可以,如果是用戶啓動任務user_task被稱爲快速連續芹菜幾次關閉下列要求:

Unrecoverable error: TransactionManagementError('Transaction managed block ended with pending COMMIT/ROLLBACK',)
進一步下跌的堆棧
TransactionManagementError("Transaction managed block ended with " TransactionManagementError: Transaction managed block ended with pending COMMIT/ROLLBACK

根據celerd docs,使用django-celery w/sqlite我一次只能處理一個任務,這對我來說很完美,但好像多個任務都在彼此之上。

我已經將併發級別設置爲1,並將池限制爲無,嘗試和幫助,但我仍然得到相同的錯誤。

我在這裏想念芹菜嗎?做錯了什麼?有沒有更好的方法來實現我想要完成的目標?

回答

相關問題