Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django Celeryd/Django celery带有sqlite后端的TransactionManagementError_Django_Sqlite_Django Celery_Celeryd - Fatal编程技术网

Django Celeryd/Django celery带有sqlite后端的TransactionManagementError

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

将Django用于一个小型应用程序,该应用程序主要以cron风格在后台执行作业,但也由用户启动。 免责声明:这是我第一次接触celeryd,到目前为止,安装程序都来自文档和示例

我使用的是Django 1.3、celeryd 2.5、Django celery 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连续快速调用几次,芹菜将关闭,并出现以下情况,这不应该发生,但会发生,因为它可以发生:

不可恢复的错误:TransactionManagementError“事务管理块以挂起的提交/回滚结束”, 再往下 TransactionManagementErrorTransaction托管块以结束 TransactionManagementError:事务管理块以挂起的提交/回滚结束

据介绍,使用django芹菜w/sqlite,我一次只能处理一个任务,这非常适合我的情况,但似乎多个任务相互重叠

我已经将并发级别设置为1,池限制设置为None,以尝试帮助解决问题,但仍然会遇到相同的错误


我是不是少了些芹菜?做错了什么?有没有更好的方法来实现我的目标?

您可以尝试使用rabbitmq作为代理,而不是sqlite,这可能会避免您看到的问题类型。这里有相关说明,应该非常简单:


Celeryd和rabbitmq是一个非常可靠的组合,试一试。

您可以尝试使用rabbitmq作为代理,而不是sqlite,这可能会避免您看到的问题类型。这里有相关说明,应该非常简单:

Celeryd和rabbitmq是非常可靠的组合,试一试吧