celery - 如何为 celery-sqs 中的不同队列设置不同的 visibility_timeout
问题描述
我正在使用 celery 和 sqs 进行后台任务处理。我们有多个任务在运行,我想为不同的任务设置不同的visibility_timeout;是否可以在 settings.py 文件中执行此操作。当前的 settings.py 文件是
BROKER_TRANSPORT_OPTIONS = {
'region': 'ap-southeast-1',
'polling_interval': 10,
'queue_name_prefix': 'dev-',
'visibility_timeout': 43200,
}
解决方案
这应该有几种不同的方式。我相信您可以为您的案例做的最直接的事情是利用Celery 的任务路由功能。配置可能看起来像这样
app.conf.task_routes = ([
('feed.tasks.*', {'queue': 'feeds'}),
('web.tasks.*', {'queue': 'web'}),
(re.compile(r'(video|image)\.tasks\..*'), {'queue': 'media'}),
],)
另请参阅:消息路由。
或者,您也可以“即时”路由任务,在发送任务时随心所欲地覆盖queue
/的应用程序默认值。routing_key
例如...
>>> from feeds.tasks import import_feed
>>> import_feed.apply_async(args=['http://cnn.com/rss'],
... queue='feed_tasks',
... routing_key='feed.import')
推荐阅读
- java - 使用本地主机改造 android 超时
- c# - System.Net.Http.HttpRequestException:无法向缓冲区写入超过配置的最大缓冲区大小的字节数:2147483647
- python-3.x - 未找到 Heroku 应用请求的端点 API
- c++ - Qt::DirectConnection 在多线程环境中的作用如何?
- ios - UITextView - 键盘在拖动时关闭或以交互方式关闭
- html - 如何在 html 文件中的图像上获取文本块并将其用作 GMail 电子邮件正文来发送电子邮件?
- ios - Firebase FCM 远程通知 didReceiveRemoteNotification 不起作用
- apache-spark - Spark pivot 调用 Job 即使 pivot 不是 Action
- python - Python argparse 忽略默认值
- php - laravel:单击第二个分页的下一页时如何删除第一个分页