简述
asyncio 是以协程的模式来编写并发的库,使用 async/await 语法。
在 IO密集型 的网络编程里,异步IO 协程 省去了开辟新的线程和进程的开销。
asyncio 是 Python3.4 版本引入到标准库,python3.5 加入了 async/await 特性。
常用方法:
async 声明协程
await 等待一个协程
await asyncio.sleep(1) 协程休眠
asyncio.run(func())用来在非协程函数中调用协程
asyncio.create_task() 用函数将协程打包为一个 Task 排入日程准备执行,返回 asyncio.Task 对象。
asyncio.gather() 函数来并发多个协程。
问题一:
“RuntimeError: There is no current event loop in thread 'Thread-1'”
在 thread-1的线程中没有事件循环,asyncio 中,先要创建一个 get_event_loop 的对象,然后需要生成一个类型是 list 的 tasks
最后把 tasks 放入 run 中进行循环处理
在 loop = asyncio.get_event_loop()上面添加下面两条指令:
new_loop = asyncio.new_event_loop()
asyncio.set_event_loop(new_loop)
问题二:
“OSError: Unable to remove Temporary User Data”
这个是因为项目的临时数据目录是存在了c盘,但是当删除它的时候,应该是遇到了权限问题,没有权限没法删除,需要增加到有权限的目录即可
browser = await launch(headless=False, userDataDir='./cache/')