Python Twisted和数据库连接

2024-06-11 07:51:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我们的工作项目包括同步应用程序(短生命周期)和异步Twisted应用程序(长生命周期)。我们正在对数据库进行分解,并将构建一个API模块来分离该模块中的所有SQL。我想创建这个API,以便同步和异步应用程序都可以使用它。对于同步应用程序,我希望对数据库API的调用像使用MySQLdb一样返回数据(阻塞),但对于异步应用程序,我希望对相同API函数/方法的调用是非阻塞的,可能返回延迟的。有人能给我一些提示、建议或帮助吗? 提前谢谢你, 道格


Tags: 模块数据项目方法函数api数据库应用程序
3条回答

twisted.enterprise.adbapi似乎是一条路要走——你认为它不符合你的要求吗?如果是,你能解释一下原因吗?

你考虑过从continuation-passing style借阅一页吗?无堆栈Pythonsupports continuations directly,如果您正在使用它,并且该方法似乎已经有了gained some interest

在Twisted中,基本上需要一个包装器来包装一个函数,它返回一个延迟的(比如Twisted DB层),等待它的结果,然后返回它们。但是,您不能忙着等待,因为这会耗尽您的反应器周期,使用Twisted non-blocking wait检查要完成的任务可能效率低下。

内联回调或延迟生成器能否解决您的问题?他们需要一个现代的扭曲。See the twistedmatrix docs

def thingummy():
   thing = yield makeSomeRequestResultingInDeferred()
   print thing #the result! hoorj!
thingummy = inlineCallbacks(thingummy)

另一个选择是有两个方法执行同一个SQL模板,一个使用runInteraction,它阻塞,另一个使用runQuery,它返回一个延迟,但这将涉及更多的代码路径,它们执行相同的操作。

相关问题 更多 >