我有一个站点,每当我在服务器运行时尝试打开数据库时,它都会显示一条错误消息,指出数据库已被不同的进程打开。
问题是我有一些脚本可以使用 cron 安排来检查数据库,甚至可以在服务器运行时使用 pshell
。
到目前为止,从不同的进程打开数据库似乎是不可能的,而文档实际上说可以有多个连接到数据库。
这个问题迫使我一次只运行一个脚本/进程,包括服务器。
最佳答案
ZODB 在其默认配置中是一个进程内对象数据库。但是,您可以使用客户端-服务器模型跨进程共享它。
这里有 3 个选项:
- 使用ZEO创建一个专用进程来共享 ZODB 存储。在 Using ZODB with ZEO 上曾经有一个 Pyramid 食谱条目使用 Pyramid 特定的说明,但要考虑到它是 removed in December 2013因为过时了。对我来说,这些说明看起来仍然相当准确,但我还没有测试过它们。
- 使用RelStorage将对象数据库存储在 Oracle、MySQL 或 PostgeSQL 中。
- 使用NEO使用 MySQL 作为分布式后端。警告:该平台(尚未)与 Python 3 兼容,但该项目正在积极开展工作(截至 2018 年 11 月),因此这可能会成为现实。
关于python - 从两个进程访问 ZODB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13293690/