【发布时间】:2018-04-04 20:45:21
【问题描述】:
我已经在 python 应用程序中苦苦挣扎了几天,我希望在文件夹中查找一个或多个文件,并遍历每个文件和其中的每个记录,并创建要在 Janusgraph 上持久保存的对象数据库。我正在使用的特定 OGM 要求使用 asyncio 以异步方式完成与数据库的事务。我已经阅读了很多关于 asyncio 的博客和帖子,并且我想我了解 async、await、task 等的概念......在我的应用程序中,我定义了几个处理不同部分的函数:
- 检索所有可用文件的列表
- 选择一个文件进行处理
- 遍历选定的文件并读取一行/记录进行处理
- 接收记录,确定解析 from in 并调用其他几个函数,这些函数负责在模型对象被持久化到数据库之前创建模型对象。例如,我创建了不同的函数:用户、会话、浏览器、设备使用、服务器等......
我理解(我可能是错的)使用 asyncio 的一大优势是在对函数的调用通常会因 I/O、数据库事务、网络延迟等而阻塞的情况下......
所以我的问题是我是否需要将所有我的函数转换为协程并安排在事件循环中运行,或者只是那些会阻塞的函数,例如将事务提交到数据库。我一开始就尝试了这种方法,但遇到了各种各样的问题。
【问题讨论】:
-
如果你有一个现有的同步代码库,你通常可以通过将所有阻塞调用的函数转换为异步,然后跟随调用者链直到顶部,以便每个函数至少有时直接或间接调用异步的东西现在是异步的。但是,如果您是从头开始工作,通常最好在编写任何内容之前考虑这些异步链。
标签: python python-asyncio janusgraph goblin