python time sleep 阻塞 异步_python_高级进阶(4)同步_异步_回调函数_阻塞

本文详细探讨了Python中的同步与异步编程,以及阻塞与非阻塞的概念。通过示例展示了如何使用`concurrent.futures`模块的`ProcessPoolExecutor`和`ThreadPoolExecutor`进行异步调用,以及如何通过回调函数实现结果的实时接收。同时,对比了不同异步调用策略的优缺点。
摘要由CSDN通过智能技术生成

阻塞

阻塞: 程序运行时,遇到了IO,程序挂起,cpu被切走.

非阻塞

非阻塞: 程序没有遇到IO,程序遇到IO但是我通过某种手段,让cpu强行运行我的程序.

​ #同步:

提交一个任务,自任务开始运行直到此任务结束(可能有IO),返回一个返回值之后,我在提交下一个#​ #异步:

一次提交多个任务,然后我就直接执行下一行代码.

收取结果 :

1将所有的任务的结果统一回收. 2. 完成一个任务,返回一个结果.

给三个人发布任务:

同步: 先告知第一个人完成写书的任务,我从原地等待,等他两天之后完成了,

告诉完事了,我在发布下一个任务......

异步: 直接将三个任务告知三个人,我就忙我的我,直到三个人完成之后,告知我.

方式一: 异步调用,统一回收结果.

# from concurrent.futures import ProcessPoolExecutor,ThreadPoolExecutor

# import time

# import random

# import os

#

# def task(i):

# print(f'{os.getpid()}开始任务')

# time.sleep(random.randint(1,3))

# print(f'{os.getpid()}任务结束')

# return i

#

# if __name__ == '__main__':

#

# # 异步调用

# pool = ProcessPoolExecutor()

# l1 = []

# for i in range(10):

# obj = pool.submit(task,i)

# l1.append(obj)

#

# pool.shutdown(wait=True)

# print(l1)

# for i in l1:

# print(i.result())

# print('===主')

# 统一回收结果: 我不能马上收到任何一个已经完成的任务的返回值,

我只能等到所有的任务全部结束统一回收.

异步调用

步调用返回值如何接收?

# from concurrent.futures import ProcessPoolExecutor,ThreadPoolExecutor

# import time

# import random

# import os

#

# def task(i):

# print(f'{os.getpid()}开始任务')

# time.sleep(random.randint(1,3))

# print(f'{os.getpid()}任务结束')

# return i

# if __name__ == '__main__':

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值