标签: celeryd

如何在Heroku上运行时解决celeryd的退出超时问题(错误R12)?

我在Heroku dyno上运行celeryd.当我关闭它并且它先前已处理(甚至已完成)至少一个任务时,它没有正确关闭,我从Heroku收到错误R12(退出超时).

这是我从我的Procfile(通过Django和django-celery)运行celeryd的方式:

celeryd: python manage.py celeryd -E --loglevel=INFO
Run Code Online (Sandbox Code Playgroud)

这是我正在做的触发它:

> heroku ps:scale web=0 celeryd=0 --app myapp
Run Code Online (Sandbox Code Playgroud)

这是我得到的日志输出:

2012-09-07T12:56:31+00:00 heroku[celeryd.1]: State changed from up to down
2012-09-07T12:56:31+00:00 heroku[api]: Scale to celeryd=0, web=1 by mail@mydomain.com
2012-09-07T12:56:32+00:00 heroku[web.1]: State changed from up to down
2012-09-07T12:56:32+00:00 heroku[api]: Scale to web=0 by mail@mydomain.com
2012-09-07T12:56:34+00:00 heroku[celeryd.1]: Stopping all processes with SIGTERM
2012-09-07T12:56:35+00:00 heroku[web.1]: Stopping all processes with SIGTERM
2012-09-07T12:56:37+00:00 heroku[web.1]: Process exited with status 143
2012-09-07T12:56:43+00:00 heroku[celeryd.1]: Error R12 (Exit timeout) -> At …
Run Code Online (Sandbox Code Playgroud)

heroku celery django-celery celeryd

13
推荐指数
1
解决办法
1528
查看次数

腌制芹菜

按照此处的说明,我将脚本从github复制到/etc/init.d/celeryd,然后使其可执行;

$ ll /etc/init.d/celeryd
-rwxr-xr-x 1 root root 9481 Feb 19 11:27 /etc/init.d/celeryd*
Run Code Online (Sandbox Code Playgroud)

我按照说明创建了配置文件/ etc/default/celeryd:

# Names of nodes to start
#   most will only start one node:
#CELERYD_NODES="worker1"
#   but you can also start multiple and configure settings
#   for each in CELERYD_OPTS (see `celery multi --help` for examples).
CELERYD_NODES="worker1 worker2 worker3"

# Absolute or relative path to the 'celery' command:
CELERY_BIN="/usr/local/bin/celery"
#CELERY_BIN="/virtualenvs/def/bin/celery"

# App instance to use
# comment out …
Run Code Online (Sandbox Code Playgroud)

python linux celery celeryd

13
推荐指数
1
解决办法
1万
查看次数

celerybeat会自动禁用定期任务

我想使用django-celery的管理界面为芹菜创建一个周期性任务.我有一个任务设置,在手动或脚本调用时运行良好.它只是通过celerybeat无效.根据调试日志,任务设置为enabled = False首次检索,我想知道为什么.

添加周期性任务并[1, False]作为位置参数传递时,任务会自动禁用,我看不到任何进一步的输出.如果在没有参数的情况下添加任务,则会执行任务,但会立即引发异常,因为我没有提供所需的参数(有意义).

有谁看到这里的问题是什么?

提前致谢.

这是提供参数后的输出:

[DEBUG/Beat] SELECT "djcelery_periodictask"."id", [...] 
             FROM "djcelery_periodictask" 
             WHERE "djcelery_periodictask"."enabled" = true ; args=(True,)

[DEBUG/Beat] SELECT "djcelery_intervalschedule"."id", [...] 
             FROM "djcelery_intervalschedule" 
             WHERE "djcelery_intervalschedule"."id" = 3 ; args=(3,)

[DEBUG/Beat] SELECT (1) AS "a" 
             FROM "djcelery_periodictask" 
             WHERE "djcelery_periodictask"."id" = 3  LIMIT 1; args=(3,)

[DEBUG/Beat] UPDATE "djcelery_periodictask" 
             SET "name" = E'<taskname>', "task" = E'<task.module.path>', 
                 "interval_id" = 3, "crontab_id" = NULL, 
                 "args" = E'[1, False,]', "kwargs" = E'{}', "queue" = NULL, …
Run Code Online (Sandbox Code Playgroud)

django celery django-celery celeryd

11
推荐指数
2
解决办法
3695
查看次数

Celery节点失败,在pidbox上已经在重启时使用

我和兔子经纪人一起经营芹菜.今天我没有芹菜节点 - 它不执行任务而不响应service celeryd stop命令.几次重复节点停止后,但在开始时我收到此消息:

[WARNING/MainProcess] celery@nodename ready.
[WARNING/MainProcess] /home/ubuntu/virtualenv/project_1/local/lib/python2.7/site-packages/kombu/pidbox.py:73: UserWarning: A node named u'nodename' is already using this process mailbox!

Maybe you forgot to shutdown the other node or did not do so properly?
Or if you meant to start multiple nodes on the same host please make sure
you give each node a unique node name!

  warnings.warn(W_PIDBOX_IN_USE % {'hostname': self.hostname})
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议如何解锁进程邮箱?

rabbitmq celeryd

11
推荐指数
2
解决办法
9330
查看次数

Celery和Redis的内存不足

我有一个部署到Heroku的Django应用程序,其中一个工作进程运行芹菜(+ celerycam用于监控).我使用RedisToGo的Redis数据库作为经纪人.我注意到Redis的内存不足.

这是我的procfile的样子:

web: python app/manage.py run_gunicorn -b "0.0.0.0:$PORT" -w 3
worker: python lipo/manage.py celerycam & python app/manage.py celeryd -E -B --loglevel=INFO
Run Code Online (Sandbox Code Playgroud)

这是KEYS'*'的输出:

  1. "_kombu.binding.celeryd.pidbox"
  2. "celeryev.643a99be-74e8-44e1-8c67-fdd9891a5326"
  3. "celeryev.f7a1d511-448b-42ad-9e51-52baee60e977"
  4. "_kombu.binding.celeryev"
  5. "celeryev.d4bd2c8d-57ea-4058-8597-e48f874698ca"
  6. `_kombu.binding.celery"

celeryev.643a99be-74e8-44e1-8c67-fdd9891a5326 正在填写这些消息:

{"sw_sys": "Linux", "clock": 1, "timestamp": 1325914922.206671, "hostname": "064d9ffe-94a3-4a4e-b0c2-be9a85880c74", "type": "worker-online", "sw_ident": "celeryd", "sw_ver": "2.4.5"}
Run Code Online (Sandbox Code Playgroud)

知道如何定期清除这些消息吗?

django redis celery celeryd celerybeat

9
推荐指数
1
解决办法
2093
查看次数

如何使用redis经纪人从芹菜中删除任务?

我有添加一些错误taskcelery使用Redis的broker

但现在我想删除不正确的task,我找不到任何方法来做到这一点

是否有一些命令或一些api这样做?

python celery celery-task celeryd

8
推荐指数
1
解决办法
1万
查看次数

芹菜:工人数与并发数

有什么区别:

  1. 一个工人并发4或
  2. 两个并发2的工人

对于相同的队列.

谢谢

concurrency web-worker celery django-celery celeryd

8
推荐指数
2
解决办法
3175
查看次数

在一台机器上共享芹菜工人之间的记忆区域

我想在芹菜中分享我的工作节点之间的小块信息(例如缓存的授权令牌,统计信息......).

如果我在我的任务文件中创建一个全局文件,那么每个工作者都是唯一的(我的工作者是进程并且具有1个任务/执行的生命周期).

什么是最佳做法?我应该在外部保存状态(DB),创建一个老式的共享内存(由于芹菜中不同的池实现,可能很难)?

提前致谢!

python shared-memory celeryd

7
推荐指数
1
解决办法
4033
查看次数

芹菜异常处理

假设我有这个任务定义:

def some_other_foo(input)
raise Exception('This is not handled!')
return input

@app.task(
  bind=True,
  max_retries=5,
  soft_time_limit=20)
def some_foo(self, someInput={}):
   response=""
   try:
     response = some_other_foo(someInput)
   except Exception as exc:
     self.retry(countdown=5, exc=exc)
     response="error"
 return response
Run Code Online (Sandbox Code Playgroud)

我有一个问题,即 some_foo 中未处理异常,我得到错误而不是 response="error",任务崩溃,我得到 Traceback,表明引发了异常。

是否可以返回常规响应,但将芹菜任务设置为失败,因此结果花将失败?

我正在使用:
Celery 4.1
AMPQ 作为代理
Celery Flower 作为监控

python celery python-2.7 celeryd

7
推荐指数
1
解决办法
1万
查看次数

在同一台服务器上运行多个Django Celery网站

我正在使用apache2虚拟服务器在同一台服务器上运行多个Django/apache/wsgi网站.我想使用芹菜,但如果我为多个网站启动celeryd,所有网站都将使用我开始的最后一个celeryd实例的配置(日志,数据库等).

有没有办法使用多个Celeryd(每个网站一个)或一个Celeryd用于所有这些?似乎它应该是可行的,但我不知道如何.

django celery supervisord django-celery celeryd

6
推荐指数
2
解决办法
2152
查看次数