同步执行异步代码

考虑到有部分开发者有需要写同步代码的需求,亦或是简单的逻辑不想用异步,这里提供了一个很方便的异步转同步代码,使用方法如下:

  1. from bilibili_api import sync, video
  2. v = video.Video('BV1GK4y1V7HP')
  3. print(sync(v.get_info()))
  4. print(sync(v.get_download_url(0)))

使用 sync() 来包装异步代码,按照上述代码格式写即可实现同步运行。

原理其实也很简单,sync() 代码如下:

  1. from typing import Coroutine
  2. import asyncio
  3. def sync(coroutine: Coroutine):
  4. """
  5. 同步执行异步函数
  6. Args:
  7. coroutine (Coroutine): 异步函数
  8. Returns:
  9. 该函数的返回值
  10. """
  11. loop = asyncio.get_event_loop()
  12. return loop.run_until_complete(coroutine)