Django Celeryd/Django celery带有sqlite后端的TransactionManagementError
将Django用于一个小型应用程序,该应用程序主要以cron风格在后台执行作业,但也由用户启动。 免责声明:这是我第一次接触celeryd,到目前为止,安装程序都来自文档和示例 我使用的是Django 1.3、celeryd 2.5、Django celery 2.5.1和sqlite3。 我仍处于测试阶段,所以我没有调用真正的任务,只是打印消息 我有一个cron风格的任务:Django Celeryd/Django celery带有sqlite后端的TransactionManagementError,django,sqlite,django-celery,celeryd,Django,Sqlite,Django Celery,Celeryd,将Django用于一个小型应用程序,该应用程序主要以cron风格在后台执行作业,但也由用户启动。 免责声明:这是我第一次接触celeryd,到目前为止,安装程序都来自文档和示例 我使用的是Django 1.3、celeryd 2.5、Django celery 2.5.1和sqlite3。 我仍处于测试阶段,所以我没有调用真正的任务,只是打印消息 我有一个cron风格的任务: @periodic_task(run_every=crontab(hour="*", minute="*", day_o
@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连续快速调用几次,芹菜将关闭,并出现以下情况,这不应该发生,但会发生,因为它可以发生:
不可恢复的错误:TransactionManagementError“事务管理块以挂起的提交/回滚结束”,
再往下
TransactionManagementErrorTransaction托管块以结束
TransactionManagementError:事务管理块以挂起的提交/回滚结束
据介绍,使用django芹菜w/sqlite,我一次只能处理一个任务,这非常适合我的情况,但似乎多个任务相互重叠
我已经将并发级别设置为1,池限制设置为None,以尝试帮助解决问题,但仍然会遇到相同的错误
我是不是少了些芹菜?做错了什么?有没有更好的方法来实现我的目标?您可以尝试使用rabbitmq作为代理,而不是sqlite,这可能会避免您看到的问题类型。这里有相关说明,应该非常简单:
Celeryd和rabbitmq是一个非常可靠的组合,试一试。您可以尝试使用rabbitmq作为代理,而不是sqlite,这可能会避免您看到的问题类型。这里有相关说明,应该非常简单: Celeryd和rabbitmq是非常可靠的组合,试一试吧