问题标签 [django-celery]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
django - Django Celery 和多个数据库(Celery、Django 和 RabbitMQ)
是否可以设置与 Django Celery 一起使用的不同数据库?
我有一个配置多个数据库的项目,不希望 Django Celery 使用默认数据库。
如果我仍然可以使用 django celery 管理页面并读取存储在这个不同数据库中的结果,我会很好:)
django - 如何判断一个任务是否已经在 django-celery 中排队?
这是我的设置:
- django 1.3
- 芹菜 2.2.6
- Django 芹菜 2.2.4
- djkombu 0.9.2
在我的 settings.py 文件中,我有
即我只是使用数据库来排队任务。
现在谈谈我的问题:我有一个用户启动的任务,可能需要几分钟才能完成。我希望每个用户只运行一次任务,并且我会将任务的结果缓存在一个临时文件中,所以如果用户再次启动任务,我只返回缓存的文件。我的视图函数中有如下代码:
这段代码几乎可以工作。但是当用户快速重新加载页面时,我遇到了问题。从任务排队到任务最终从队列中拉出并交给工作人员之间有 1-3 秒的延迟。在此期间,任务的状态保持为 PENDING,这会导致视图逻辑启动重复任务。
我需要的是某种方式来判断任务是否已经提交到队列中,所以我最终不会提交两次。在芹菜中有这样做的标准方法吗?
celery - 如果 celeryd 没有运行,是否可以指定 task.delay 或 task.apply_async 应该失败?
我正在使用 djcelery 和 djkombu。我会使用 RabbitMQ(因为这是推荐的选项),但是 RabbitMQ 在我的 VPS 上使用了太多内存,而且我是个小气鬼。
我认为如果我的代码尝试安排任务并且 celeryd 没有运行,那么在我的应用程序中抛出异常会很好。这是一种由主管、nagios 等监控 celeryd 的备用计划。
起初我以为immediate
设置会这样做,但它不适用于我的 Django ORM 配置。
django - django-celery (djcelery) 表有什么用?
当我运行 syncdb 时,我注意到创建了很多表,例如:
- djcelery_crontabschedule
- ...
- djcelery_taskstate
django-kombu 提供传输,因此它与实际队列无关。即使当我运行任务时,我仍然看到这些表中没有填充任何内容。这些表是做什么用的?仅用于监控目的——如果我启用它?
如果是这样,如果我查找 AsyncResult(),我猜这实际上是通过 django-kombu 表而不是 djcelery 查找任务结果,这也是真的吗?
谢谢。
django - celerybeat 自动禁用周期性任务
我想使用django-celery的管理界面为 celery 创建一个定期任务。我有一个任务设置,当手动或通过脚本调用时运行良好。它只是不能通过celerybeat工作。根据调试日志,任务设置为enabled = False
第一次检索,我想知道为什么。
添加周期性任务并[1, False]
作为位置参数传递时,该任务会自动禁用,我看不到任何进一步的输出。当不带参数添加时,任务会被执行,但会立即引发异常,因为我没有提供所需的参数(有道理)。
有谁看到这里有什么问题?
提前致谢。
这是提供参数后的输出:
编辑: 它适用于以下设置。我仍然不知道为什么它不适用于django-celery。
django - 芹菜原木问题
我在 Ubuntu 上使用 rabbitmq-server 运行 django app + django-celery。我在芹菜中有很多这样的错误:
[2011-06-03 13:58:15,387:警告/PoolWorker-1] HTTP 错误 500:内部服务器错误
我在哪里可以找到此请求的回溯或响应以检查出现了什么问题?我应该查看哪些日志?
谢谢,阿尔沙夫斯基亚历山大
rabbitmq - celerybeat 关机 - initscript 命令?
我正在尝试设置 rabbitmq/celery/django-celery/django 以使其具有“防重启”功能,即一切都会自行恢复。一切似乎都很好,除了这个:
当我重新启动时,所有服务都启动了,但似乎 celeryd 在 rabbitmq 之前启动,并且 celerybeat 随后被终止,因为它无法连接(?):
在 Ubuntu 上,我将带有 apt 的 rabbitmq-server、带有 pip 的 django-celery 安装到我的 virtualenv 中,然后我符号链接了我从https://github.com/ask/celery/tree/master/contrib/debian获得的“celeryd”initscript /etc/init.d 中的/init.d,在 /etc/default/celeryd 中将其配置为使用我的 virtualenv 中的 django celeryd,并通过它使其“防重启”(也许“默认值”是问题?)
我没有使用单独的 initscript 运行 celeryd 和 celerybeat,而是将 celeryd 配置为包含 Beat(也许这就是问题所在?):
任何指针如何解决这个问题?
如果我
没有投诉:
但我需要消除对任何手动步骤的需要。
python - 芹菜任务和自定义装饰器
我正在使用 django 和 celery(django-celery) 开发一个项目。我们的团队决定将所有数据访问代码包装在(app-name)/manager.py
其中(而不是像django
这样包装到管理器中),并让 (app-name)/task.py 中的代码只处理 celery 的组装和执行任务(所以我们没有 django此层中的 ORM 依赖项)。
在我的manager.py
,我有这样的事情:
在我的 task.py 中,我喜欢将它们包装成任务(然后可能使用这些任务来完成更复杂的任务),所以我编写了这个装饰器:
然后(仍在task.py
):
没有@task
. 但是,在应用了那个@task
装饰器之后(按照 celery 文档的指示放在顶部),事情就开始分崩离析。显然,每次调用时,都会传递mfunc_to_task.__call__
相同的函数作为. 所以我每次都得到相同的结果,现在我唯一要做的就是得到一个标签。task.get_tag
f
wrapper_f
我是装饰师的新手。任何人都可以帮助我理解这里出了什么问题,或者指出其他方法来完成任务?我真的很讨厌为我的每个数据访问函数编写相同的任务包装代码。
python - Django 项目中的 Celery 异步任务。这个怎么运作?
我需要在我的 django 项目中运行长时间的任务。决定使用 celery 和 redis 作为代理。安装的 redis 运行:
服务器现在已准备好接受端口 6379 上的连接
比我安装 django-celery,配置:
并运行它:
我的示例任务如下所示:
现在我尝试在 shell 中运行它:
它等待很长时间并呈现 Traceback http://dpaste.com/555939/。它可以是什么?也许我错过了什么?
django - celery eventlet 任务的许多套接字错误
使用 --pool=eventlet 选项运行我的 celery worker 时,我从 amqplib.client_0_8.method_framing.read_method 收到很多“IOError:Socket closed”异常。我还看到来自 eventlet.hubs.hub.switch 的很多超时异常。
我正在使用类似于https://gist.github.com/821848上的 async_manage.py 脚本,运行的作品如下:
这是一个已知问题,还是我的配置或设置有问题?
我正在运行 djcelery 2.2.4、Django 1.3 和 eventlet 0.9.15。