问题标签 [celeryd]
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 - 停止芹菜的问题
我将 celeryd 作为守护进程运行,但有时无法优雅地停止它。当我发送 TERM 信号并且队列中有项目(在这种情况下service celeryd stop
)时,celeryd 将停止接受新工作,并关闭所有工作进程。但是,父进程不会关闭。
我刚刚遇到了一个场景,我在两台独立的工作机器上运行 celeryd:A 和 B。在 RabbitMQ 服务器上有大约 1000 条消息时,我关闭了 A,并经历了我上面解释过的情况。B 继续工作,但随后因为服务器上留下大约 40 条消息而停滞不前。但是,我能够正确停止 B。
我重新启动了 B,看看它是否会将 40 个项目从队列中取出,但它不会。接下来,我硬杀了A,然后B抓住并完成了任务。
我的结论是父进程已经为它的子进程从我们的 RabbitMQ 服务器中保留了 40 个项目。它会正确地收割孩子,但除非我手动杀死它,否则不会将这些项目释放回 RabbitMQ。
有没有人经历过类似的事情?
我正在运行 Celery 2.2.2
django - celerybeat 自动禁用周期性任务
我想使用django-celery的管理界面为 celery 创建一个定期任务。我有一个任务设置,当手动或通过脚本调用时运行良好。它只是不能通过celerybeat工作。根据调试日志,任务设置为enabled = False
第一次检索,我想知道为什么。
添加周期性任务并[1, False]
作为位置参数传递时,该任务会自动禁用,我看不到任何进一步的输出。当不带参数添加时,任务会被执行,但会立即引发异常,因为我没有提供所需的参数(有道理)。
有谁看到这里有什么问题?
提前致谢。
这是提供参数后的输出:
编辑: 它适用于以下设置。我仍然不知道为什么它不适用于django-celery。
rabbitmq - 如何从我的连接自己的通道以外的其他通道恢复未确认的 AMQP 消息?
似乎我让 rabbitmq 服务器运行的时间越长,未确认的消息就越麻烦。我很想重新排队。实际上,似乎有一个 amqp 命令可以执行此操作,但它仅适用于您的连接正在使用的通道。我构建了一个小鼠兔脚本至少可以尝试一下,但是我要么遗漏了一些东西,要么无法以这种方式完成(rabbitmqctl 怎么样?)
django - Django 中的 Celery(RabbitMQ 与 Django 数据库)
我正在尝试使用 Celery 设置 Django,以便可以在后台发送大量电子邮件。
我对不同组件如何在 Celery 中发挥作用有点困惑。我需要使用 RabbitMQ 吗?我可以只用“django-kombu”来运行 Celery 吗?(http://ask.github.com/celery/tutorials/otherqueues.html#django-database)
我从 django-celery 文档( http://django-celery.readthedocs.org/en/latest/getting-started/first-steps-with-django.html )中的“Django 的第一步”开始,但是当我进入“运行 celery 工作服务器”会发生这种情况:
然后我必须退出这个过程......
celery - 我想要一个将任务推送到工作人员(celeryd)的队列,具体取决于间隔时间设置
我正在使用芹菜、rabbitmq 的项目工作。我想有权控制将队列推送任务到worker(celeryd)的间隔。
rabbitmq - 如何正确配置和运行远程 celery worker?
我是 celery 的新手,可能做错了什么,但我已经花了很多时间试图弄清楚如何正确配置 celery。
因此,在我的环境中,我有 2 台远程服务器;一个是主要的(它有公共 IP 地址和数据库服务器、rabbitmq 服务器和运行我的 Web 应用程序的 Web 服务器等大部分东西都在那里),另一个用于我想使用 celery 从主服务器异步调用的特定任务。
我打算使用 RabbitMQ 作为代理和结果后端。Celery 配置非常基本:
当我在主服务器上运行一个worker时,任务执行得很好,但是当我在远程服务器上运行它时,只执行了几个任务,然后worker卡住了,无法执行任何任务。当我重新启动工作人员时,它会执行更多任务并再次卡住。任务内部没有什么特别之处,我什至尝试了一个只添加 2 个数字的测试任务。我尝试以不同的方式运行worker(妖魔化而不是妖魔化,设置不同的并发性并使用celeryd_multi),没有任何帮助。
可能是什么原因?我错过了什么?除了代理(RabbitMQ)之外,我是否必须在主服务器上运行某些东西?或者它是芹菜中的一个错误(我尝试了几个版本:2.2.4、2.3.3 和 dev,但都没有工作)?
嗯...我刚刚在本地工作人员上重现了同样的问题,所以我真的不知道它是什么......是否需要在每执行 N 个任务后重新启动 celery 工作人员?
任何帮助将不胜感激:)
python - 芹菜工人变量共享问题
我在一个项目中使用 Python 和celery 。在项目中,我有两个文件:
芹菜配置文件
和example.py
在celeryconfig.py中,我将CELERYD_CONCURRENCY设置为2,这意味着它将我的任务队列中的任务分配给2 个不同的进程。
从 Python 控制台,我运行:
这将创建两个由两个工作人员同时执行的任务。问题是,由于两个工作进程都运行它们的任务函数 [ getDigest() ],它们似乎使用相同的哈希对象 ( md5 )。celeryd的输出证实了这一点,如下所示。
为了简单起见,我使用的是hashlib的md5对象,但是在我的实际项目中,我使用的是一个不能被多个进程访问和修改的对象。这预计会使工人崩溃。
这就提出了一个问题:如何修改我的代码以使工作进程初始化并使用它们自己的 ( md5 ) 对象?现在,他们共享同一个对象——导致我的应用程序崩溃。这可能吗?
django - Celery 和 Redis 不断耗尽内存
我有一个部署到 Heroku 的 Django 应用程序,其中一个工作进程运行 celery(+ celerycam 用于监控)。我使用 RedisToGo 的 Redis 数据库作为代理。我注意到 Redis 总是内存不足。
这就是我的 procfile 的样子:
这是 KEYS '*' 的输出:
- “_kombu.binding.celeryd.pidbox”
- “celeryev.643a99be-74e8-44e1-8c67-fdd9891a5326”
- “celeryev.f7a1d511-448b-42ad-9e51-52baee60e977”
- “_kombu.binding.celeryev”
- “celeryev.d4bd2c8d-57ea-4058-8597-e48f874698ca”
- `_kombu.binding.celery"
celeryev.643a99be-74e8-44e1-8c67-fdd9891a5326
充满了这些消息:
知道我可以做些什么来定期清除这些消息吗?
django - 无法让 django celeryd 在 Windows 上工作
我有一个 django 项目,运行良好,runserver 位于:
我的 settings.py 和 manage.py 位于上述路径中。
我打开可信赖的 cmd shell,cd 到该目录并运行manage.py celeryd
,我得到一个异常并出现以下错误:
很公平。谷歌和 StackOverflow 来救援,我找到了答案。我需要提供--settings=settings
给命令。奇怪,因为 runserver 不需要--settings=settings
,但这就是生活。我愿意妥协。我继续收到错误消息:
所以我用力地挠了挠头,并决定如果我给这个家伙提供一个不同的 pythonpath,他会很好地放置。我的下一个尝试是:
现在我们到了某个地方!没有错误。但是,与 settings.py 位于同一目录中的 celeryconfig.py 没有得到处理。我的任务都没有加载。我甚至将语法错误放入 celeryconfg.py 以向自己证明它没有被加载。
我做的下一步是使用 django 1.4 中的 manage.py。这个 manage.py 被放置在D:\EverTabs\work\evertabs-website\src\
而不是D:\EverTabs\work\evertabs-website\src\evertabs\
. 此时,我可以用简单的语法执行 celeryd,而不必添加到 pythonpath 中。尽管如此,我的 celeryconfig.py 仍然保持不变:
进一步的研究表明,如果我将 tasks.py 添加到我的顶级目录 9 中 setting.py 所在的位置)。Celery 会自动发现它们。这已经奏效了。但是,celeryconfig.py 仍然没有被处理,所以我不能在那里做更复杂的配置。目前,这不是问题,因为我的任务终于找到了。但是,celeryconfig.py 没有被处理,这让我非常困扰。
我现在开始意识到,也许现代 celery 毕竟不是在寻找 celeryconfig.py。我可以简单地将这些设置放在我的 settings.py 中,celery 会选择它们。事情开始看起来不错。
python - 每个重试周期增加 celery 重试时间
我在 Docs-Example 中使用 celery 重试:
如何在每次重试此作业时增加重试倒计时 - 例如 60 秒、2 分钟、4 分钟等等,直到 MaxRetriesExceeded 被提高?