python - 如何在生产和开发中以不同的方式静态配置 Celery 应用程序?

标签 python celery

我想使用 Celery 实现一个任务队列来执行长时间运行的任务,例如与外部 API 交互(例如用于 SMS 发送的 Twilio)。但是,我在生产和开发中使用不同的 API 凭据。

我不知道如何静态配置 Celery(即从命令行)以传递适当的 API 凭据。相关地,如果同时存在开发队列和生产队列,我的应用程序代码(启动 Celery 任务)如何指定要与哪个 Celery 队列通信?

感谢您提供的任何帮助。 视频

编辑:如何使用 celery 的 --config 选项的工作示例的额外奖励。

最佳答案

我的做法是使用环境变量。举一个简单的例子...

# By convention, my configuration files are in a "configs/XXX.ini" file, with
# XXX being the configuration name (e.g., "staging.ini")
config_filename = os.path.join('configs', os.environ['CELERY_CONFIG'] + '.ini')
configuration = read_config_file(config_filename)

# Now you can create the Celery object using your configuration...
celery = Celery('mymodule', broker=configuration['CELERY_BROKER_URL'])

@celery.task
def add_stuff(x, y):
    ....

你最终会像这样从命令行运行......

export CELERY_CONFIG=staging
celery -A mymodule worker

This question有一个这样做的例子,但他们说“我怎样才能以不那么丑陋的方式做到这一点?”就我而言,这是完全可以接受的,而且一点也不“丑陋”。

关于python - 如何在生产和开发中以不同的方式静态配置 Celery 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17220142/

相关文章:

python - 如何使用 simpledoctemplate reportlab 包将图像移动到 pdf 页面顶部?

python - OpenCV 轮廓区域异常

python - 使用 groupby 将分组数据转换为数据帧

python - 防止 Celery Beat 运行相同的任务

python - celery 节拍队列包括过时的任务

python - 从 wx.lib.pubsub 将 Publisher 导入为 pub ImportError : cannot import name Publisher

python - 从多维数组到层次结构

python - 使用 celery 在简单任务中表现不佳

python - celery 如何终止并重新启动任务

django - Django请求完成后如何启动 celery 任务