使用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,並將池限制爲無,嘗試和幫助,但我仍然得到相同的錯誤。
我在這裏想念芹菜嗎?做錯了什麼?有沒有更好的方法來實現我想要完成的目標?