celery

【django-celery】异步任务管理器---celery

不羁的心 提交于 2020-10-28 14:57:14
因为superviser不支持python3,而网上关于celery后台运行的说明大都使用superviser,所以对于python3用户celery后台运行便成为了一个问题。再没废话,直接上代码。 环境说明: python3.6 django2.0.5 我们使用redis的作为celery任务队列,有一个合成包可以直接安装两者一起使用需要的安装包 直接在终端键入 pip install celery-with-redis 就可以安装需要的依赖包了 构建项目过程略过,直接开始进行celery配置 一、celery配置。 我们的项目名称为myproject,首先setting配置,添加 # celery settings # celery中间人 redis://redis服务所在的ip地址:端口/数据库号 BROKER_URL = ' redis://localhost:6379/3 ' # celery结果返回,可用于跟踪结果 CELERY_RESULT_BACKEND = ' redis://localhost:6379/3 ' # celery内容等消息的格式设置 CELERY_ACCEPT_CONTENT = [ ' application/json ' , ] CELERY_TASK_SERIALIZER = ' json ' CELERY_RESULT

记一次celery使用过成中丢失上下文问题

大城市里の小女人 提交于 2020-10-27 09:53:31
记一次celery使用过程中丢失上下文问题 问题场景 项目中需要在celery的异步任务中连接其他服务的celery任务队列,并向所连接的celery中发送task任务。 这样使用的结果就是:需要生成两个不同的celery实例,在第一个celery实例中需要使用flask中的上下文,并进行上下文的生成,在调用完另一个celery实例后, 在worker运行了标记的task最大任务销毁重启之后;会发生在需要上下文的celery异步任务中报没有flask上下文的错误。例如如下逻辑 from project import create_app() # 封装的flask的创建app过程 from celery import Celery from project.task import celery_config celery_app = Celery(__name__, broker=celery_config.CELERY_BROKER_URL) # 程序中默认celery_app celery_app.config_from_object('project.task.celery_config') @celery_app.task(name='example_task') def example_task(**kwargs): from project import create