在twisted中使用pymongo到底有什么问题?

3 投票
1 回答
1079 浏览
提问于 2025-04-18 18:53

我有一个使用 Twisted 框架的服务器应用,它可以和大约 1000 个客户端保持持续的连接。每个客户端偶尔会向我的 Twisted 服务器发送数据,我希望这个服务器能把数据存储到 MongoDB 数据库里。到目前为止,一切都很好。

但是,pymongo 的文档上说“没有好的方法可以将 pymongo 和 Twisted 一起使用”。我不明白为什么会这样。有人能解释一下具体的问题是什么,以及可能会遇到哪些陷阱吗?我觉得这可能和 pymongo 是同步的有关,但我只想把一些东西放进数据库里。

如果我在一个名为 connector.py 的文件中声明了一个 pymongo.MongoClient 的实例,然后在运行我的 Twisted 工厂和协议的主 Python 文件中导入这个 connector,我应该可以在每个协议(与每个客户端的连接)中使用这个 pymongo.MongoClient 的实例来存储数据到数据库。

那么,具体的问题是什么呢?显然我有点困惑。

1 个回答

5

简而言之: pymongo 的调用是阻塞的,也就是说,当你运行它时,程序会停下来,直到这个调用完成。这会随机破坏 twisted 的内部状态,因为这和 twisted 的设计理念是相反的。

所以你应该寻找一个和 twisted 兼容的驱动,比如 tx-mongo。tx-mongo 的使用者比 pymongo 少,所以它的文档相对来说有点粗糙,但你应该能在它的 example 目录里找到你需要的所有内容。

背景知识: 线程与事件编程

撰写回答