阻塞事件循环
下面是一个简单的例子,演示在异步程序中调用阻塞函数如何阻塞事件循环

解释:
blocking_function:这是一个简单的阻塞函数,它调用 time.sleep(5) 来模拟一个长时间运行的操作。这是一个同步操作,会阻塞当前线程。
事件循环的阻塞:
当 blocking_function() 在 main() 中被调用时,它会阻塞整个事件循环,因为 time.sleep 会让当前线程(在这种情况下是主线程)暂停执行 5 秒。
结果:
程序运行时,“Start blocking operation...” 会立即打印,然后程序会暂停 5 秒,因为 blocking_function 阻塞了事件循环。
5 秒后,“Blocking operation complete.” 和 “Main complete.” 才会打印出来。
改进:
为了避免阻塞事件循环,可以使用 run_in_executor 方法,如下所示:

在这个改进版中,blocking_function 被提交给线程池执行器,这样它不会阻塞事件循环。main() 函数会立即完成,等待阻塞操作完成后继续执行。这样可以使事件循环继续处理其他任务,而不被阻塞函数影响。

浙公网安备 33010602011771号