目标
用一个等待过程理解,能够实现一致的方便,70行代码
例子说明
某方需要2,执行req2需要执行这个时间,最终执行时间是3秒,大约1秒,同时执行;如果最终时间是秒,如果执行的话,具体请参看,友情提示是,yield from 方法后面如果是它的工具,可以进入____
import time
from collections import deque
_delay = deque()
class FutureX:
def __init__(self, coro=None, delay_second=None):
self.coro = coro
if delay_second:
self.start = delay_second + time.time()
def step(self):
coro = self.coro
try:
result = coro.send(None)
except StopIteration as e:
print(e.value)
pass
else:
if isinstance(result, FutureX):
_delay.append((self._wakeup, result))
else:
pass
def _wakeup(self):
self.step()
def __iter__(self):
yield self
return None
def coroutine(func):
co = func.__code__
func.__code__ = co.replace(co_flags=co.co_flags | 0x100)
return func
@coroutine
def sleep0(seconds):
future = FutureX(delay_second=seconds)
b = yield from future
return seconds
async def req1(delay_seconds):
resp_time = await sleep0(delay_seconds)
return resp_time
async def req2(delay_seconds):
resp_time = await sleep0(delay_seconds)
return resp_time
t1 = time.time()
f1, f2 = FutureX(req1(2)), FutureX(req2(1))
f1.step()
f2.step()
while _delay:
callback, args = _delay.popleft()
start = args.start
if not start:
continue
while True:
end = time.time()
if start <= end:
try:
callback()
except StopIteration as e:
pass
break
print(f'花费的时间:{round(time.time() - t1,1)}')
'''
结果:
2
1
花费的时间:2.0
'''
审核编辑:刘清
-
python
+关注
关注
56文章
4811浏览量
85124
发布评论请先 登录
相关推荐
使用Python实现xgboost教程
使用TMS320C6416协处理器:Turbo协处理器(TCP)
![使用TMS320C6416<b class='flag-5'>协</b>处理器:Turbo<b class='flag-5'>协</b>处理器(TCP)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
使用TMS320C6416协处理器:Viterbi协处理器(VCP)
![使用TMS320C6416<b class='flag-5'>协</b>处理器:Viterbi<b class='flag-5'>协</b>处理器(VCP)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
如何帮助孩子高效学习Python:开源硬件实践是最优选择
使用Python进行Ping测试
![使用<b class='flag-5'>Python</b>进行Ping测试](https://file1.elecfans.com/web2/M00/02/FD/wKgaoma53G-AaVZUAABUXbtkmLo864.jpg)
pytorch和python的关系是什么
Python建模算法与应用
Python在AI中的应用实例
opencv-python和opencv一样吗
用pycharm进行python爬虫的步骤
使用Python进行自然语言处理
鸿蒙OS开发实例:【ArkTS类库异步并发async/await】
![鸿蒙OS开发实例:【ArkTS类库异步并发async/<b class='flag-5'>await</b>】](https://file1.elecfans.com/web2/M00/C5/CD/wKgZomYCdwyAIFf5AAB_7E1pFms943.jpg)
鸿蒙原生应用开发-ArkTS语言基础类库异步并发简述async/await
鸿蒙轻内核源码分析:MMU 协处理器
![鸿蒙轻内核源码分析:MMU <b class='flag-5'>协</b>处理器](https://file1.elecfans.com/web2/M00/C0/48/wKgZomXURhaAGcYoAAMU1aaKtPg526.png)
评论