第十二天笔记

文章解释了同步和异步的概念,同步意味着进程需等待请求返回再继续,而异步允许进程在等待期间继续执行其他任务。Celery是一个分布式任务队列,其工作流程包括客户端发布任务,任务存储在如Redis的队列中,由任务处理者获取并执行。文章还介绍了如何安装Celery和eventlet模块,以及如何在Python中编写和使用Celery的异步任务。

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

1. 简单说一下你对同步和异步的理解?

同步:同步是指一个进程在执行某个请求的时候,如果该请求需要一段时间才能返回信息,那么这个进程会一直等待下去,直到收到返回信息才继续执行下去。

异步:异步是指进程不需要一直等待下去,而是继续执行下面的操作,不管其他进程的状态,当有信息返回的时候会通知进程进行处理,这样就可以提高执行的效率了,即异步是我们发出的一个请求,该请求会在后台自动发出并获取数据,然后对数据进行处理,在此过程中,我们可以继续做其他操作,不管它怎么发出请求,不关心它怎么处理数据。

2. 简单说一下Celery的工作流程?

1、客户端发布任务
2、发布的任务存到任务队列里面,可以以redis、rabbitMQ、MessageQueue、MySQL存储,一般在django/flask程序里redis居多
3、任务处理者会不断从任务队列里面获取任务执行

3. 如何安装celery和eventlet模块?

pip install -U celery -i https://pypi.douban.com/simple
celery -A ihome.tasks.task_sms worker –l info -P eventlet

4. 如何在单一文件中编写celery异步任务处理代码?

//  from celery import Celery
	from ihome.libs.yuntongxun.sms import CPP

	# 定义celery对象,ihome是celery的名字,根据业务场景而定,当前做的是爱家租房,所以是ihome
	# broker="redis://127.0.0.1:6379/1":指定消息中间人的链接地址
	celery_app = Celery("ihome", broker="redis://127.0.0.1:6379/1")


	@celery_app.task
	def send_sms(to,datas,temp_id):
	    """发送短信的异步任务"""
	    cpp = CPP()
	    # 发送短信后没有处理返回值问题,因此待会儿会返回None
	    cpp.send_message(temp_id, to, datas)

5. 如何使用客户端向消息队列中发送异步任务?

调用自己编写异步任务的函数名.delay

6. 如何在异步任务的发送方获取异步任务执行的返回结果?

//  返回的是异步执行结果对象
	result = send_sms.delay(mobile, [sms_code, int(constants.SMS_CODE_REDIS_EXPIRES / 60)], 1)
	print("result=", result, "result.id=", result.id)
	# 通过get()方法能够捕获celery异步执行的结果
	# get()方法默认是阻塞行为,会等到有了执行结果后才返回
	# get()方法也接受参数timeout,表示超时时间,如果时间到了还没有得到返回结果则报连接超时异常
	ret = result.get(timeout=10)
	print("ret=", ret)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值