同步调用和异步调用

同步调用: 阻塞式调用

'''
同步调用是一种阻塞式调用,一段代码调用另一端代码时,必须等待这段代码执行结束并返回结果后,代码才能继续执行下去。	

例如: 
考试时,有的同学是一道题一道题的往下做,当有一道题没做出来时,绝对不会继续做下去,
这就是同步调用的过程,一段逻辑没有执行完成时,代码会一直等待,直到代码执行结束,才执行下面的逻辑。
'''

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('任务已经开始被执行')
posted @ 2020-07-26 23:25  给你加马桶唱疏通  阅读(126)  评论(0编辑  收藏  举报