同步调用和异步调用
同步调用: 阻塞式调用
'''
同步调用是一种阻塞式调用,一段代码调用另一端代码时,必须等待这段代码执行结束并返回结果后,代码才能继续执行下去。
例如:
考试时,有的同学是一道题一道题的往下做,当有一道题没做出来时,绝对不会继续做下去,
这就是同步调用的过程,一段逻辑没有执行完成时,代码会一直等待,直到代码执行结束,才执行下面的逻辑。
'''
from redis import Redis
redis_obj = Redis(decode_responses=True)
res = redis_obj.brpop('xxxxxxx') # 如果name字段没有值 或者 不存在它会一直等待下去, 下面的代码一直就不会执行
print(res) # 我要等上面的代码执行了, 我才能执行啊
异步调用: 非阻塞式调用
'''
异步调用是一种非阻塞式调用,一段异步代码还未执行完,可以继续执行下一段代码逻辑,当代码执行完以后,通过回调函数返回继续执行相应的逻辑,而不耽误其他代码的执行。
'''
from celery.result import AsyncResult
# from scripts.celery_task.celery import app
from scripts.celery_task.celery import app
task_id = 'ad25839c-710b-4643-a0b0-7b090852367e'
if __name__ == '__main__':
async_obj = AsyncResult(id=task_id, app=app)
if async_obj.successful():
result = async_obj.get()
print(result)
elif async_obj.failed():
print('任务失败')
elif async_obj.status == 'PENDING':
print('任务等待中被执行')
elif async_obj.status == 'RETRY':
print('任务异常后正在重试')
elif async_obj.status == 'STARTED':
print('任务已经开始被执行')