分布式异步任务Celery

本文介绍了一个使用Celery进行任务调度的实际案例,包括配置Celery与Redis的连接、定义发送邮件的任务并使用异步方式调用该任务。通过Python代码演示了如何延迟执行发送邮件的任务,并展示了Celery worker的日志输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  

 

-A代表APP


celery -A tasks  worker --loglevel=info -n nodemaster
 
 -------------- celery@nodemaster v4.1.0 (latentcall)
---- **** ----- 
--- * ***  * -- Darwin-17.3.0-x86_64-i386-64bit 2018-04-15 11:53:09
-- * - **** --- 
- ** ---------- [config]
- ** ---------- .> app:         tasks:0x110b42400
- ** ---------- .> transport:   redis://localhost:6379/0
- ** ---------- .> results:     disabled://
- *** --- * --- .> concurrency: 4 (prefork)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** ----- 
 -------------- [queues]
                .> celery           exchange=celery(direct) key=celery
                

[tasks]
  . tasks.sendmail

[2018-04-15 11:53:09,217: INFO/MainProcess] Connected to redis://localhost:6379/0
[2018-04-15 11:53:09,228: INFO/MainProcess] mingle: searching for neighbors
[2018-04-15 11:53:10,256: INFO/MainProcess] mingle: sync with 2 nodes
[2018-04-15 11:53:10,257: INFO/MainProcess] mingle: sync complete
[2018-04-15 11:53:10,270: INFO/MainProcess] celery@nodemaster ready.




celery -A tasks  inspect registered

celery -A tasks inspect registered
-> celery@node2: OK
    * tasks.sendmail
-> celery@nodemaster: OK
    * tasks.sendmail


Python 3.4.3 (default, Nov  6 2015, 22:26:48) 
[GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.53)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from tasks import sendmail
>>> sendmail.delay(dict(to='celery@python.org'))
<AsyncResult: b49534cd-472f-42da-934c-057e53e0d0a8>
>>> sendmail.delay(dict(to='celery@python.org'))
<AsyncResult: 99cd7565-612a-4b31-b025-de7b5c48673c>
>>> sendmail.delay(dict(to='celery@python.org'))
<AsyncResult: bd123165-d220-4552-bcb8-e009c76258d7>
>>> sendmail.delay(dict(to='celery@python.org'))
<AsyncResult: 01a8ef22-149c-4b24-8d92-f07468598646>
>>> sendmail.delay(dict(to='celery@python.org'))
<AsyncResult: e3b50542-d643-4b4c-bd71-5fb11d7915b7>
>>> sendmail.delay(dict(to='celery@python.org222222'))
<AsyncResult: ee225dd3-dea5-4013-907d-3dca5089c669>
>>> sendmail.delay(dict(to='celery@python.org2222223'))
<AsyncResult: e13d9de4-cd71-4aef-bc2c-bc4cc7dc3002>
>>> sendmail.delay(dict(to='celery@python.org2222227'))
<AsyncResult: 75a8c645-237c-4b64-831f-37936f71191f>
>>> 

  

# tasks.py
import time
from celery import Celery

celery = Celery('tasks', broker='redis://localhost:6379/0')

@celery.task
def sendmail(mail):
    print('....sending mail to %s...' % mail['to'])
    time.sleep(20.0)
    print('mail sent.')
~                        

 

 

转载于:https://www.cnblogs.com/studyNT/p/8846810.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值