celery

django中配置使用celery

匿名 (未验证) 提交于 2019-12-02 23:55:01
环境版本: windows7 x64 django 1.11.6 django-celery 3.2.2 工程结构说明: 待补充 1、新建django项目DjangoCelery 2、在...\DjangoCelery\DjangoCelery\DjangoCelery下新建celery配置文件celeryconfig.py: 待补充 3、在项目路径...\DjangoCelery\下新建app,命名为course 4、在...\DjangoCelery\course下新建tasks.py文件 待补充 来源:博客园 作者: 垄上行 链接:https://www.cnblogs.com/apple2016/p/11425307.html

celery-预习用

一个人想着一个人 提交于 2019-12-02 23:54:06
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)和 任务执行结果存储(task result store)组成。 消息中间件 Celery本身不提供消息服务,但是可以方便的和第三方提供的消息中间件集成。包括,RabbitMQ, Redis等等 任务执行单元 Worker是Celery提供的任务执行的单元,worker并发的运行在分布式的系统节点中。 任务结果存储 Task result store用来存储Worker执行的任务的结果,Celery支持以不同方式存储任务的结果,包括AMQP, redis等 使用场景 异步任务:将耗时操作任务提交给Celery去异步执行,比如发送短信/邮件、消息推送、音视频处理等等 定时任务:定时执行某件事情,比如每天数据统计 Celery的安装配置 pip install celery 消息中间件:RabbitMQ/Redis app=Celery(

Celery安装及使用

匿名 (未验证) 提交于 2019-12-02 23:36:01
一、Celery在windows下安装步骤 1、打开终端输入命令 pip install celery==3.1.25 2、查看完整可用命令选项 celery worker --help 3、创建一个celery application项目作为任务列表,打开pycharm应用,创建应用,然后创建后运行tasks.py文件,虽然运行不报错,其实它并没有启动woker。 4、启动Celery worker进行监听并执行任务,切换到终端 celery -A tasks worker --loglevel=info 打开终端后,切换到tasks.py文件所在目录,然后输入上面的命令 注意:若不切换到task.py文件,会报错找不到这个文件,下面是运行正确的结果 5、调度任务 再打开一个终端 ,切换到tasks.py文件当前目录,然后进行python环境,调用函数执行任务,如图所示: 第二个终端运行后,查看刚开始运行的第一个终端,如图: 注意 :1、若你在windows下安装celery是4.0及以上版本,那么会出现问题 文章来源: https://blog.csdn.net/u012325060/article/details/79292243

Django(异步)--Celery

匿名 (未验证) 提交于 2019-12-02 23:34:01
下面以发送认证电子邮件为例: 我们在做网站后端程序开发时,会碰到这样的需求:用户需要在我们的网站填写注册信息,我们发给用户一封注册激活邮件到用户邮箱,如果由于各种原因,这封邮件发送所需时间较长,那么客户端将会等待很久,造成不好的用户体验。 关于Celery: Celery是基于Python开发的一个分布式任务队列框架,支持使用任务队列的方式在分布的机器/进程/线程上执行任务调度。 任务发出者 -----> 任务队列----->任务处理者 1、建立消息队列 首先,我们必须拥有一个broker消息队列用于发送和接受消息。Celery官网给出了多个broker的备选方案:RabbitMQ、Redis、Database(不推荐)以及其他的消息中间件。使用RabbitMQ作为我们的消息中间人。在Linux上安装的方式如下: sudo apt-get install rabbitmq-server 命令执行成功后,rabbitmq-server就已经安装好并运行在后台了。 另外也可以通过命令rabbitmq-server -detached来在后台启动rabbitmq server以及命令rabbitmqctl stop来停止server。 在settings.py import djcelery djcelery.setup_loader() BROKER_URL = 'redis:/

问题:使用celery开启异步任务报错'utf8' codec can't decode byte 0x80 in position 0: invalid start byte

匿名 (未验证) 提交于 2019-12-02 23:32:01
result = AsyncResult(id=_id, app=main.app).state File "E:\python2.7\lib\site-packages\celery\result.py", line 394, in state return self._get_task_meta()['status'] File "E:\python2.7\lib\site-packages\celery\result.py", line 339, in _get_task_meta return self._maybe_set_cache(self.backend.get_task_meta(self.id)) File "E:\python2.7\lib\site-packages\celery\backends\base.py", line 307, in get_task_meta meta = self._get_task_meta_for(task_id) File "E:\python2.7\lib\site-packages\celery\backends\base.py", line 521, in _get_task_meta_for return self.decode_result(meta) File "E:\python2.7\lib\site

handle `post_save` signal in celery

随声附和 提交于 2019-12-02 23:06:25
I have a rather long running task that needs to be executed after inserting or updating an specific model. I decided to use post_save signal instead of overriding save method to reduce coupling. Since Django signals are not asynchronous I had to do the long running job as a Celery task (which we already have in our stack). A simplified version of my signal handling function is as follows: @receiver(post_save, sender=MyModel) def my_model_post_save(sender, instance, **kwargs): handle_save_task.apply_async(args=(instance.pk,)) Also, because the job is done asynchronously I passed the primary key

celery使用rabbitmq报错[Errno 104] Connection reset by peer.

匿名 (未验证) 提交于 2019-12-02 23:05:13
写好celery任务文件,使用celery -A app worker --loglevel=info启动时,报告如下错误: [2019-01-29 01:19:26,680: ERROR/MainProcess] consumer: Cannot connect to amqp://sunlight:**@127.0.0.1:5672/celery: [Errno 104] Connection reset by peer. Trying again in 4.00 seconds... 检查了很久,终于发现是celery配置的broker的url写错了, rabbitmqctl add_user sunlight sunlight123 rabbitmqctl add_vhost /celery app = Celery(__name__, broker="amqp://sunlight:sunlight123@localhost:5672/ celery ", backend="redis://localhost") 上门的标红处,显然是错误的,应该替换为如下: app = Celery(__name__, broker="amqp://sunlight:sunlight123@localhost:5672//celery", backend="redis:/

Celery: Worker with concurrency and reserved tasks only running 1 task

扶醉桌前 提交于 2019-12-02 22:57:47
Some of the tasks in my code were taking longer and longer to execute. Upon inspection I noticed that although I have my worker node set to concurrency 6, and 6 processes exist to 'do work', but only 1 task is shown under 'running tasks'. Here is a little visual proof: Here are the worker options: And here is the task tab for that worker with only 1 running process: I have found that if I restart celery, the concurrency is once again respected and i will see >1 running task, but after some amount of time/tasks it reverts back to this behavior.. Any ideas for fixing this intermittent problem? I

celery实战要点

匿名 (未验证) 提交于 2019-12-02 22:56:40
作为一个Celery使用重度用户,看到 Celery Best Practices 这篇文章,不由得菊花一紧。干脆翻译出来,同时也会加入我们项目中celery的实战经验。 至于Celery为何物,看这里 Celery 。 通常在使用Django的时候,你可能需要执行一些长时间的后台任务,没准你可能需要使用一些能排序的任务队列,那么Celery将会是一个非常好的选择。 当把Celery作为一个任务队列用于很多项目中后,作者积累了一些最佳实践方式,譬如如何用合适的方式使用Celery,以及一些Celery提供的但是还未充分使用的特性。 1,不要使用数据库作为你的AMQP Broker 数据库并不是天生设计成能用于AMQP broker的,在生产环境下,它很有可能在某时候当机(PS,当掉这点我觉得任何系统都不能保证不当吧!!!)。 作者猜想为啥很多人使用数据库作为broker主要是因为他们已经有一个数据库用来给web app提供数据存储了,于是干脆直接拿来使用,设置成Celery的broker是很容易的,并且不需要再安装其他组件(譬如RabbitMQ)。 假设有如下场景:你有4个后端workers去获取并处理放入到数据库里面的任务,这意味着你有4个进程为了获取最新任务,需要频繁地去轮询数据库,没准每个worker同时还有多个自己的并发线程在干这事情。 某一天,你发现因为太多的任务产生

Celery定时任务细讲

匿名 (未验证) 提交于 2019-12-02 22:51:30
任务所在目录 ├―― celery_task # celery包 如果celery_task只是建了普通文件夹__init__可以没有,如果是包一定要有 │ ├―― __init__.py # 包文件 看情况要不要存在 │ ├―― celery.py # celery连接和配置相关文件,且名字必须交celery.py,其实也不是必须的不然你指令可能要修改 │ └―― tasks.py # 所有任务函数 celery.py from celery import Celery #创建一个Celery对象 broker = 'redis://127.0.0.1:6379/2' #任务放在用redis://ip:端口/第几个数据库 backend = 'redis://127.0.0.1:6379/3' #任务结果放在 include = ['celery_task.tasks',] #任务所在目录 app = Celery(broker=broker, backend=backend, include=include) app.conf.timezone = 'Asia/Shanghai' #配置时区 app.conf.enable_utc = False # 是否使用UTC from datetime import timedelta from celery.schedules