代码中使用了asyncio的协程,所以需要在异步上下文中运行。

首先,获取当前正在运行的事件循环,然后使用run_in_executor方法在另一个线程中运行time.sleep(20),这是一个同步阻塞操作,会使当前协程暂停20秒。

在等待20秒的同时,事件循环会继续执行其他的协程任务,所以我们可以在这个时间段内启动另外两个协程,让它们并发执行。

然后,等待20秒结束后,第一个协程恢复执行,并在控制台输出1,这个过程会重复3次,所以会输出3个1

示例代码的详细过程如下:

  1. 第一个协程开始执行,获取事件循环对象loop
  2. 在另一个线程中执行time.sleep(20),当前协程被暂停20秒
  3. 在等待20秒的同时,事件循环启动另外两个协程,让它们并发执行
  4. 20秒结束后,第一个协程恢复执行,输出1
  5. 第二个协程执行完成,输出1
  6. 第三个协程执行完成,输出1
同时在3个协程执行 loop = asyncioget_running_loop await looprun_in_executorNone lambda timesleep20 print1多少秒后会输出3个1给出详细过程

原文地址: https://www.cveoy.top/t/topic/fLoN 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录