ZEO-ZODB数据库在本地运行时不工作

2024-06-01 21:24:04 发布

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

我试着看一下在ZODB数据库上运行ZEO的documentation,但是它没有按照他们所说的那样工作。 我可以让一个普通的ZODB正常运行,但是我想让一个程序通过几个进程访问数据库,所以我试图让ZEO工作。在

我在一个包含zeo子文件夹的文件夹中创建了这个脚本,该文件夹将保存数据库.fs“由make_server函数在不同的并行进程中创建的文件:

代码:

from ZEO import ClientStorage
import ZODB
import ZODB.config
import os, time, site, subprocess, multiprocessing

# make the server in for the database in a separate process with windows command
def make_server():
    runzeo_path = site.getsitepackages()[0] + "\Lib\site-packages\zeo-4.0.0-py2.7.egg\ZEO\\runzeo.py"
    filestorage_path = os.getcwd() + '\zeo\database.fs'
    subprocess.call(["python", runzeo_path, "-a", "127.0.0.1:9100", "-f" , filestorage_path])

if __name__ == "__main__":
    server_process = multiprocessing.Process(target = make_server)
    server_process.start()
    time.sleep(5)
    storage = ClientStorage.ClientStorage(('localhost', 9100), wait=False)
    db = ZODB.DB(storage)
    connection = db.open()
    root = connection.root()

如果没有给出wait=False,程序将只在ClientStorage行阻塞。在

如果给定wait=False,则会产生以下错误:

错误消息:

^{pr2}$

以下是运行服务器的进程的cmd提示符输出:

------
2013-12-06T21:07:27 INFO ZEO.runzeo (7460) opening storage '1' using FileStorage

------
2013-12-06T21:07:27 WARNING ZODB.FileStorage Ignoring index for C:\Users\cab0008
\Google Drive\EclipseWorkspace\NewSpectro - v1\20131202\2 - database\zeo\databas
e.fs
------
2013-12-06T21:07:27 INFO ZEO.StorageServer StorageServer created RW with storage
s: 1:RW:C:\Users\cab0008\Google Drive\EclipseWorkspace\NewSpectro - v1\20131202\
2 - database\zeo\database.fs
------
2013-12-06T21:07:27 INFO ZEO.zrpc (7460) listening on ('127.0.0.1', 9100)

我会做错什么?我只想让它在本地运行,这样就不需要任何花哨的网络内容了。在


Tags: pathimport文件夹数据库makeserver进程storage
3条回答

在Windows上也有同样的错误,在Linux上一切正常。。。 你的代码是好的,为了使这工作改变如下 C: \pyo-3.0\pyo-3.0\pyo-3.0\pyo-3.0\触发器.py电话:235

self.trigger.send(b'x')

C:\Python33\Lib\site packages\ZEO-4.0.0-py3.3.egg\ZEO\zrpc\客户端.pyln:458:459-评论他们

下面是这些台词:

if socktype != socket.SOCK_STREAM:

    continue    

你应该使用适当的过程管理和简化你的生活。您可能需要研究一下supervisor,它可以负责运行/启动/停止应用程序和ZEO。在

否则,您需要看一下将ZEO守护程序化的double-fork技巧,但是当像supervisor这样的流程管理工具为您完成这项工作时,为什么还要费心呢。在

如果您精通关系数据库管理,并且已经有了一个关系数据库,您还可以考虑将RelStorage作为一个非常好的ZODB(低级)存储后端。在

在Windows中,应该在路径中使用双\而不是单\号。实现这一点的简单和便携的方法是使用os.path.join操作系统()函数,例如os.path.join('os.getcwd()', 'zeo', 'database.fs')。否则类似的代码对我来说也行。在

相关问题 更多 >