多任务异步协程
协程:更高效的利用CPU
import timedef func():print("黎明")time.sleep(3)print("还是黎明")func()
等待时机长 sleep时CPU不再工作 IO操作(费时不费力)->阻塞
线程运行阻塞后 移出主线程 移动到下一个
4个任务一个线程 线程池多线程切换消耗资源,而此不耗
event_loop 轮巡
python实现协程
import asyncio #借助event_loopasync def func():#协程 生成器print("233") if __name__ == "__main__":result = func()#print(result)asyncio.run(result)#loop.close()可能报错#同下
""" event_loop = asyncio.get_event_loop()#event_loop执行协程对象,直到该对象内容执行完毕event_loop.run_until_complete(result)
"""
官方方案
import asyncio #借助event_loop
import timeasync def func1():print("func1") await asyncio.sleep(1)print("func1 over")async def func2():#协程 生成器print("func2") await asyncio.sleep(2)print("func2 over")async def func3():#协程 生成器print("func3") await asyncio.sleep(3)print("func3 over")#多函数任务if __name__ == '__main__':start = time.time()result1 = func1()result2 = func2()result3 = func3()#三个任务放一起tasks = [result1,result2,result3,]asyncio.run(asyncio.wait(tasks)) #无阻塞
print(time.time() - start())#await 挂起
gather wait区别:
import asyncioasync def func1():print("func1") await asyncio.sleep(1)print("func1 over")return "func1 返回值"async def func2():#协程 生成器print("func2") await asyncio.sleep(2)print("func2 over")return "func2 返回值"async def func3():#协程 生成器print("func3") await asyncio.sleep(3)print("func3 over")return "func2 返回值"async def main():f1 = func1()f2 = func2()f3 = func3()tasks = [asyncio.create_task(f1),asyncio.create_task(f2),asyncio.create_task(f3),]result = asyncio.gather(*tasks) #位置参数 有顺序 #结束,运行done,pending = await asyncio.wait(tasks)#第二#print(done)#print(pending) 空"""for t in done:print(t.done())#done set集合 无序 返回结果没有顺序"""if __name__ == "__main__":asyncio.run(main())
视频下载
"""<video>无直接url,占网速,占内存切片 .ts名称散列 顺序ts文件正确顺序保存 ->M3U -> urf-8 -> M3U81请求M3U8文件2加载ts文件3正常播放服务器压力小,用户体验好"""
M3U8 文件简介
m3u8 文件实质是一个播放列表(playlist),其可能是一个媒体播放列表(Media Playlist),或者是一个主列表(Master Playlist)。但无论是哪种播放列表,其内部文字使用的都是 utf-8 编码。
当 m3u8 文件作为媒体播放列表(Meida Playlist)时,其内部信息记录的是一系列媒体片段资源,顺序播放该片段资源,即可完整展示多媒体资源。其格式如下所示:
#EXTM3U #EXT-X-TARGETDURATION:10#EXTINF:9.009, http://media.example.com/first.ts #EXTINF:9.009, http://media.example.com/second.ts #EXTINF:3.003, http://media.example.com/third.ts