gpt4 book ai didi

django - TransactionManagementError 与 Django Celeryd/django-celery 与 sqlite 后端

转载 作者:行者123 更新时间:2023-12-03 18:18:44 29 4
gpt4 key购买 nike

将 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 设置是:
# Celery
INSTALLED_APPS += ("djcelery",)

import djcelery
djcelery.setup_loader()

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

我遇到的问题不应该发生,但会因为它可以,如果用户启动任务 user_task被快速连续调用几次 celery 关闭以下内容:
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 ,使用带有sqlite的django-celery,我一次只能处理一个任务,这非常适合我的情况,但似乎多个任务正在相互叠加。

我已将并发级别设置为 1,将池限制设置为 None,以尝试提供帮助,但我仍然遇到相同的错误。

我在这里缺少 celery 的东西吗?做错了什么?有没有更好的方法来完成我想要完成的事情?

最佳答案

您可以尝试使用rabbitmq 作为代理而不是sqlite,这可能会规避您所看到的问题类型。说明在这里,应该很简单:

http://ask.github.com/celery/getting-started/broker-installation.html#installing-rabbitmq

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

关于django - TransactionManagementError 与 Django Celeryd/django-celery 与 sqlite 后端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9946634/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com