pyramid与Celery的集成
项目描述
入门指南
通过在您的.ini中设置包含,或通过调用 config.include('pyramid_celery') 来包含pyramid_celery。
pyramid.includes = pyramid_celery
然后,您只需告诉 pyramid_celery 您的 [celery] 部分所在的ini文件。
config.configure_celery('development.ini')
然后您就可以自由使用celery了,例如基于类的
from pyramid_celery import celery_app as app
class AddTask(app.Task):
def run(self, x, y):
print x+y
或基于装饰器的
from pyramid_celery import celery_app as app
@app.task
def add(x, y):
print x+y
要获取pyramid设置,您可以在 app.conf['PYRAMID_REGISTRY'] 中访问它们。
配置
默认情况下,pyramid_celery 假设您想要通过ini设置配置celery。您可以通过调用 config.configure_celery(‘development.ini’) 来执行此操作,但如果您已经在应用程序的 main 中,并希望使用用于配置应用程序的ini,您可以执行以下操作
config.configure_celery(global_config['__file__'])
如果您想使用标准的 celeryconfig python文件,您可以将 use_celeryconfig = True 设置如下
[celery]
use_celeryconfig = True
有关celeryconfig.py的更多信息,请在此处查找
http://celery.readthedocs.io/zh/latest/userguide/configuration.html
一个示例 INI 配置如下所示
[celery]
broker_url = redis://localhost:1337/0
imports = app1.tasks
app2.tasks
[celery:broker_transport_options]
visibility_timeout = 18000
max_retries = 5
[celerybeat:task1]
task = app1.tasks.Task1
type = crontab
schedule = {"minute": 0}
您会注意到配置选项如果是字典或具有多个值,将分入各自的节。
计划/周期性任务
要使用 celerybeat(周期性任务),您需要为每个任务声明一个 celerybeat 配置节。选项包括
task - 需要执行的 Python 任务。
type - 您配置使用的调度类型,选项为 crontab、timedelta 和 integer。
schedule - 您配置类型的实际计划。
args - 额外的位置参数。
kwargs - 额外的关键字参数。
此示例的配置如下
[celerybeat:task1]
task = app1.tasks.Task1
type = crontab
schedule = {"minute": 0}
[celerybeat:task2]
task = app1.tasks.Task2
type = timedelta
schedule = {"seconds": 30}
args = [16, 16]
[celerybeat:task3]
task = app2.tasks.Task1
type = crontab
schedule = {"hour": 0, "minute": 0}
kwargs = {"boom": "shaka"}
[celerybeat:task4]
task = myapp.tasks.Task4
type = integer
schedule = 30
一个需要注意的问题是,计划任务中的日期/时间默认为 UTC。如果您想为本地时区计划确切的日期/时间,则需要设置 timezone。有关该文档的说明,请参考此处
http://celery.readthedocs.org/zh/latest/userguide/periodic-tasks.html#time-zones
如果您需要查找可用的时区,可以执行以下操作
from pprint import pprint
from pytz import all_timezones
pprint(all_timezones)
工作进程执行
celerybeat 工作进程将读取您的配置,并将任务调度到队列中,在指定的时间执行。这意味着如果您使用 celerybeat,您将运行 2 个工作进程
$ celery -A pyramid_celery.celery_app worker --ini development.ini
$ celery -A pyramid_celery.celery_app beat --ini development.ini
第一个命令是标准的工人命令,它将从队列中读取消息并运行任务。第二个命令将读取 celerybeat 配置,并定期在队列上调度任务。
路由
如果您想将任务路由到特定的队列,您可以通过在 celeryroute 节中声明它们的 queue 和/或 routing_key 来为每个任务定义一个路由。
此示例的配置如下
[celeryroute:otherapp.tasks.Task3]
queue = slow_tasks
routing_key = turtle
[celeryroute:myapp.tasks.Task1]
queue = fast_tasks
运行工作进程
要运行工作进程,我们只需使用标准的 celery 命令并添加一个额外的参数
celery worker -A pyramid_celery.celery_app --ini development.ini
如果您在 .ini 中定义了变量,例如 %(database_username)s,您可以使用 –ini-var 参数,这是一个键值对的逗号分隔列表
celery worker -A pyramid_celery.celery_app --ini development.ini --ini-var=database_username=sontek,database_password=OhYeah!
ini-var 中的值不能有空格,这将破坏 celery 的解析器。
它使用 csv 而不是多次使用 –ini-var 的原因是 celery 自身的一个错误。当它们修复错误时,我们将重新工作 API。问题跟踪在此
https://github.com/celery/celery/pull/2435
如果您使用 celerybeat 调度程序,则需要使用 –beat 标志同时运行 beat 和工作进程。
celery worker --beat -A pyramid_celery.celery_app --ini development.ini
或者您可以单独启动它,如下所示
celery beat -A pyramid_celery.celery_app --ini development.ini
日志记录
如果您使用 .ini 配置(即不使用 celeryconfig.py),则日志配置将加载到 .ini 中,而不会使用默认的 celery 日志记录器。
您很可能想在 ini 中也添加一个 celery 的日志记录节
[logger_celery]
level = INFO
handlers =
qualname = celery
然后更新您的 [loggers] 节以包括它。
如果您想使用默认的 celery 日志记录器,则可以在 .ini 的 [celery] 节中设置 CELERYD_HIJACK_ROOT_LOGGER=True。
Celery 工作进程不会在任务内部传播异常,但默认情况下会静默吞没它们。这与异步任务结果的读取行为有关。为了查看任务是否失败,您可能需要配置 celery.worker.job 日志记录器以传播异常
# Make sure Celery worker doesn't silently swallow exceptions
# See http://stackoverflow.com/a/20719461/315168
# https://github.com/celery/celery/issues/2437
[logger_celery_worker_job]
level = ERROR
handlers =
qualname = celery.worker.job
propagate = 1
如果您想使用默认的 celery 日志记录器,则可以在 .ini 的 [celery] 节中设置 CELERYD_HIJACK_ROOT_LOGGER=True。
演示
要查看所有操作,请查看 examples/long_running_with_tm,运行 redis-server,然后执行
$ python setup.py develop
$ populate_long_running_with_tm development.ini
$ pserve ./development.ini
$ celery worker -A pyramid_celery.celery_app --ini development.ini
4.0.0
放弃对 celery 3.0 的支持
放弃对 Pyramid 2.7 的支持
如果 ini 配置错误,则报错
添加对 pyramid v2 的支持
添加对 celery v5 的支持
放弃对旧 CELERY 配置选项的支持,只使用小写版本。
在 celerybeat 中添加了对 options 的支持。
添加了对 broker_transport_options 的支持。
3.0.0
支持 celery 4.0。
正确处理 CELERY_ALWAYS_EAGER。
处理 ADMINS 中的元组。
项目详情
pyramid_celery-4.0.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 021dec14a6f46efe00feeed7237e3ffe36e18e8815c8bd4278096540d8d20ccc |
|
MD5 | 13e5acc95a367abcead78a8d0a5ec05a |
|
BLAKE2b-256 | 5c816c47ad0cd519f8edfc5a20313bbb8b1a73f2014fad1e323a9fe87fc4ab5a |
pyramid_celery-4.0.0-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a12f69f393f72e90a6514a09c428d56e0c23ec17c1628e4e86f6318e4da0c449 |
|
MD5 | 941c83933cfff1d0e145166bb95ab785 |
|
BLAKE2b-256 | a30ff88f8c4781c1e4e7105d9298e8f307497c1eff4d6c4ed0dc03ff080cd366 |