celery

celery学习笔记

匿名 (未验证) 提交于 2019-12-03 00:39:02
首先生成celery的app from __future__ import absolute_import , unicode_literals import os from celery import Celery # set the default Django settings module for the ‘celery‘ program. os . environ . setdefault ( ‘DJANGO_SETTINGS_MODULE‘ , ‘proj.settings‘ ) # 导入django环境 app = Celery ( ‘proj‘ ) # 生成app # Using a string here means the worker doesn‘t have to serialize # the configuration object to child processes. # - namespace=‘CELERY‘ means all celery-related configuration keys # should have a `CELERY_` prefix. app . config_from_object ( ‘django.conf:settings‘ , namespace = ‘CELERY‘ ) # Load task

Celery - run different workers on one server

懵懂的女人 提交于 2019-12-03 00:25:26
问题 I have 2 kind of tasks : Type1 - A few of high priority small tasks. Type2 - Lot of heavy tasks with lower priority. Initially i had simple configuration with default routing, no routing keys were used. It was not sufficient - sometimes all workers were busy with Type2 Tasks, so Task1 were delayed. I've added routing keys: CELERY_DEFAULT_QUEUE = "default" CELERY_QUEUES = { "default": { "binding_key": "task.#", }, "highs": { "binding_key": "starter.#", }, } CELERY_DEFAULT_EXCHANGE = "tasks"

Celery4.1中文文档

匿名 (未验证) 提交于 2019-12-03 00:19:01
Application Celery 库在使用之前必须初始化,一个celery实例被称为一个应用(或者缩写 app)。 Celery 应用是线程安全的,所以多个不同配置、不同组件、不同任务的 应用可以在一个进程空间里共存。 下面创建一个 celery 应用: >>> from celery import Celery >>> app = Celery() >>> app <Celery __main__: 0x100469fd0 > 最后一行显示的是 celery 应用的文本表示: 包含应用类的名称(Celery),当前主模块的名称( main ),以及应用对象的内存地址(0x100469fd0)。 Main Name 上述文本表示中只有一部分是重要的,那就是主模块名称。下面分析下它为何重要。 当你发送一个消息给 Celery,消息中不会包含任何源码,而只有你想要执行的任务的名称。这就好像因特网上的域名映射原理一般:每个执行单元维护着一个任务名称到实际任务函数的映射,这个映射被称为任务注册表。 当你定义一个任务,这个任务就会被添加到本地注册表: >>> @app.task ... def add (x, y) : ... return x + y >>> add < @task: __main__.add> >>> add.name __main__.add >>> app

celery 简介

匿名 (未验证) 提交于 2019-12-03 00:15:02
Celery 官方 Celery 官网: http://www.celeryproject.org/ Celery 官方文档英文版: http://docs.celeryproject.org/en/latest/index.html Celery 官方文档中文版: http://docs.jinkan.org/docs/celery/ Celery架构 Celery的架构由三部分组成,消息中间件(message broker)、任务执行单元(worker)和 任务执行结果存储(backend - task result store)组成。 消息中间件 Celery本身不提供消息服务,但是可以方便的和第三方提供的消息中间件集成。包括,RabbitMQ, Redis等等 任务执行单元 Worker是Celery提供的任务执行的单元,worker并发的运行在分布式的系统节点中。 任务结果存储 Task result store用来存储Worker执行的任务的结果,Celery支持以不同方式存储任务的结果,包括AMQP, redis等 使用场景 异步任务:将耗时操作任务提交给Celery去异步执行,比如发送短信/邮件、消息推送、音视频处理等等 定时任务:定时执行某件事情,比如每天数据统计 Celery的安装配置 pip install celery 消息中间件:RabbitMQ

celery框架

匿名 (未验证) 提交于 2019-12-03 00:15:02
Celery 官方 Celery 官网: http://www.celeryproject.org/ Celery 官方文档英文版: http://docs.celeryproject.org/en/latest/index.html Celery 官方文档中文版: http://docs.jinkan.org/docs/celery/ Celery架构  Celery的架构由三部分组成, 消息中间件(message broker )、任务执行单元(worker)和 任务执行结果存储( backend - task result store )组成。 消息中间件 Celery本身不提供消息服务,但是可以方便的和第三方提供的消息中间件集成。包括,RabbitMQ, Redis等等 任务执行单元 Worker是Celery提供的任务执行的单元,worker并发的运行在分布式的系统节点中。 任务结果存储 Task result store用来存储Worker执行的任务的结果,Celery支持以不同方式存储任务的结果,包括AMQP, redis等 使用场景 异步任务: 将耗时操作任务提交给Celery去异步执行,比如发送短信/邮件、消息推送、音视频处理等等 定时任务 :定时执行某件事情,比如每天数据统计 Celery的安装配置 pip install celery 消息中间件

Create celery tasks then run synchronously

限于喜欢 提交于 2019-12-03 00:13:37
My app gathers a bunch of phone numbers on a page. Once the user hits the submit button I create a celery task to call each number and give a reminder message then redirect them to a page where they can see the live updates about the call. I am using web sockets to live update the status of each call and need the tasks to execute synchronously as I only have access to dial out from one number. So once the first call/task is completed, I want the next one to fire off. I took a look at CELERY_ALWAYS_EAGER settings but it just went through the first iteration and stopped. @task def reminder

celery beat 之Pidfile (celerybeat.pid) already exists报错

匿名 (未验证) 提交于 2019-12-03 00:11:01
今天在django中利用celery来自动添加任务时,执行 celery beat -A celery_task -l info 启动一个添加任务的服务时报错:Pidfile (celerybeat.pid) already exists celery beat 在运行时,会自动创建两个文件: pidfile :默认为 celerybeat.pid ,保存在项目根目录。 scheduler :默认为 celerybeat-schedule ,保存在项目根目录。 这里的报错说明 pidfile 已存在。上次运行的时候,已经自动创建了,进程结束的时候并未自动删除,从而导致再次运行的时候报错了。 直接删除这个 pidfile 文件,再次启动 celery beat celery beat - A celery_task - l info 运行成功了。 那么难道每次重启都得先删除么?参考网上说法,如果在启动celery beat的时候配置pidfile参数,并将该参数设置为空,可以规避这个问题。 来源:博客园 作者: Python家的小白 链接:https://www.cnblogs.com/863652104kai/p/11565764.html

celery详解

匿名 (未验证) 提交于 2019-12-03 00:11:01
Ŀ¼ 3.1 Broker 3.2 Backend 由于从事区块链钱包相关开发,对于区块链链上资源需要频繁的进行检查同步,在flask项目中,对于celery这个异步任务执行工具,使用的频率算是相当的高,今天,我就来简单总结一下celery的概念和使用方法。 Celery是一个异步任务的调度工具,是Distributed Task Queue,分布式任务队列,分布式决定了可以有多个worker的存在,队列表示其是异步操作,即存在一个产生任务提出需求的工头,和一群等着被分配工作的码农。 在python中定义Celery的时候,我们要引入Broker,中文翻译过来就是"中间人"的意思,在这里Broker起到一个中间人的角色,在工头提出任务的时候,把所有的任务放到Broker里面,在Broker的另一头,一群码农等着取出一个个任务准备着手做。 这种模式注定了整个系统会是个开环系统,工头对于码农们把任务做的怎样是不知情的,所以我们要引入Backend来保存每次任务的结果。这个Backend有点像我们的Broker,也是存储信息用的,只不过这里存的是那些任务的返回结果。我们可以选择只让错误执行的任务返回结果到Backend,这样我们取回结果,便可以知道有多少任务执行失败了。 3.1 Broker broker是一个消息传输的中间件,它是用来存储生产出来的各种待执行任务的

celery 调用scrapy

匿名 (未验证) 提交于 2019-12-03 00:09:02
  我的环境: celery 3.1.25 python 3.6.9 window10 celery tasks 代码如下,其中 QuotesSpider 是我的scrapy项目爬虫类名称 from celery_app import appfrom scrapy . crawler import CrawlerProcessfrom scrapy . utils . project import get_project_settingsfrom tutorial . spiders . quotes import QuotesSpider def crawl_run (): scope = 'all' process = CrawlerProcess ( settings = get_project_settings ()) process . crawl ( QuotesSpider , scope ) process . start () process . join () @app . task ( queue = 'default' ) def execute_task (): return crawl_run () 来源:博客园 作者: liuxianglong 链接:https://www.cnblogs.com/WalkOnMars/p/11558560.html

celery使用报错 AttributeError: &#039;ChannelPromise&#039; object has no attribute &#039;__value__&#039; 解决方案

匿名 (未验证) 提交于 2019-12-03 00:03:02
celery使用报错 AttributeError: ‘ChannelPromise’ object has no attribute ‘ value ’ 解决方案 在使用celery的时候注意使用的broker相应的版本 版本不对会出现如下报错: Traceback (most recent call last): File "/usr/local/lib/python3.6/site-packages/kombu/utils/functional.py", line 42, in __call__ return self.__value__ AttributeError: 'ChannelPromise' object has no attribute '__value__' ..... kombu.exceptions.VersionMismatch: Redis transport requires redis-py versions 3.2.0 or later. You have 2.10.6 报错原因是你设置的broker版本与celery版本不匹配: 根据错误信息将redis版本升级到3.2.0以上就行(根据错误信息对应包版本升级到提示版本以上就行) 来源:51CTO 作者: 流浮生 链接:https://blog.csdn.net/DanielJackZ