Cra*_*ras 3 python python-asyncio goblin janusgraph
我已经在 python 应用程序中苦苦挣扎了几天,我希望在一个文件夹中查找一个或多个文件,并遍历每个文件和其中的每个记录,并创建要保留在 Janusgraph 数据库上的对象。我正在使用的特定 OGM 要求使用 asyncio 以异步方式完成与数据库的事务。我已经阅读了很多关于 asyncio 的博客和帖子,我想我理解 async、await、tasks 等的概念......在我的应用程序中,我定义了几个处理不同部分处理的函数:
我理解(我可能是错的)使用 asyncio 的最大优势是在调用函数通常会因 I/O、数据库事务、网络延迟等而阻塞的情况下......
所以我的问题是我是否需要将所有函数转换为协程并安排运行事件循环,或者只是那些会阻塞的函数,例如将事务提交到数据库。我一开始就尝试过这种方法,但遇到了各种各样的问题。
所以我的问题是我是否需要将所有函数转换为协程并安排运行事件循环,或者只是那些会阻塞的函数,
您可能需要转换其中的大部分,但转换应该主要是机械的,归结为更改def为async def,并await在调用其他协程时添加。
显然,您无法避免转换实际阻塞的那些,无论是通过切换到适当的 asyncio API 还是使用loop.run_in_executor()那些没有的。(DNS 解析曾经是后者的一个突出例子。)
但是你还需要转换他们的callers,因为从阻塞函数调用协程是没有用的,除非函数实现了类似事件循环的功能。另一方面,当一个协程从另一个协程调用时,一切正常,因为挂起会自动传播到链的顶部。一旦整个调用链由协程组成,顶级调用链就会使用loop.create_task()or馈送到事件循环loop.run_until_complete()。
当然,既不阻塞也不调用阻塞函数的便利函数可以安全地保持非异步,并且被同步或异步代码调用而没有任何区别。
| 归档时间: |
|
| 查看次数: |
917 次 |
| 最近记录: |