芹菜Beat -金字塔邮件



所以,我有一些普通的python代码,可以在正常的python shell中完美地工作:

from pyramid_mailer.mailer import Mailer
from pyramid_mailer.message import Message
from pyramid_mailer.message import Attachment
mailer = Mailer(
    host="172.10.10.240",
    port="25")
message = Message(
subject="Orders with invalid status",
sender='r@example.com'],
recipients=['luke@example.com'],
html="<p>Test</p>")
mailer.send_immediately(message)

但是,如果我创建一个像这样的任务:

from pyramid_celery import celery_app as app
from pyramid_mailer.mailer import Mailer
from pyramid_mailer.message import Message
from pyramid_mailer.message import Attachment
mailer = Mailer(
    host="172.10.10.240",
    port="25")
@app.task
def wronglines_celery():
    message = Message(
    subject="Orders with invalid status",
    sender='r@example.com'],
    recipients=['luke@example.com'],
    html="<p>Test</p>")
    mailer.send_immediately(message)

第二个例子没有生成电子邮件,它运行得很好,没有抛出任何错误,即使将日志级别设置为DEBUG。

Running celery beat with:

celery beat -A pyramid_celery.celery_app --ini development.ini

使用芹菜网站官方文档中引用的pyramid_芹菜插件。下面可以看到我的development.ini文件(相关部分):

[celery]
BROKER_URL = amqp://app_rmq:password@localhost:5672/myvhost
CELERY_IMPORTS = intranet.celery_tasks
# Check once a day for orders with wrong line status
[celerybeat:task1]
task = intranet.celery_tasks.wronglines_celery
type = crontab
schedule = {"hour": 16, "minute": 30}
[logger_celery]
level = DEBUG
handlers =
qualname = celery

# Begin logging configuration
[loggers]
keys = root, intranet, sqlalchemy, celery
编辑:

如果我启动芹菜(没有beat),它可以完美地工作,例如,如果我启动:

celery worker -A pyramid_celery.celery_app --ini development.ini

所有的任务都执行了(一遍又一遍),但是所有的邮件都发送了,没有任何错误,似乎是引入了beat导致了问题

你确定它不能工作吗?我们配置crontab的方式显示"每天只在4:30运行一次"。所以如果你运行到4:30,我希望它能正常执行。

您能否将schedule更改为{},以使其每分钟运行一次作为基本测试?

我在这里的示例中添加了一个crontab示例:

https://github.com/sontek/pyramid_celery/blob/master/examples/scheduler_example/development.ini L33-L36

如果你能提供更多的代码(也许是一个样本的repo或修改的例子已经在repo),显示它不工作,我可以看看,希望修复这个错误。

所以,在谷歌搜索和令人沮丧的调试之后,我发现了一个旧的github问题。它声称,芹菜任务只有在与worker一起启动时才能工作,而不是与beat一起启动。用户状态

Beat不执行任务,它只是发送消息。您需要一个beat实例和一个worker实例!

用相同的命令启动work和beat实例,如下所示:

celery worker --beat -A pyramid_celery.celery_app --ini development.ini

我今天将发送一个pull请求,以修复有关启动worker和beat实例的正确方法的文档。

默认情况下,芹菜任务在错误输出时静默失败。它很可能会抛出一个你从未见过的异常。

要确定什么会失败,在任务代码中放入pdb (ipdb)断点,在前台启动celery worker并逐行执行代码。

相关内容

  • 没有找到相关文章

最新更新