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

Python ZEO ZODB数据库-在本地运行不工作,python,database,zodb,zeos,Python,Database,Zodb,Zeos,我试着查看在ZODB数据库上运行ZEO的方法,但按照他们的说法,它不起作用。 我可以让一个常规的ZODB正常运行,但是我想让一个程序的几个进程都可以访问数据库,所以我正在尝试让ZEO工作 我在一个带有子文件夹zeo的文件夹中创建了这个脚本,该文件夹将保存由make_服务器创建的“database.fs”文件,并以不同的并行过程执行: 代码: from ZEO import ClientStorage import ZODB import ZODB.config import os, time,

我试着查看在ZODB数据库上运行ZEO的方法,但按照他们的说法,它不起作用。 我可以让一个常规的ZODB正常运行,但是我想让一个程序的几个进程都可以访问数据库,所以我正在尝试让ZEO工作

我在一个带有子文件夹zeo的文件夹中创建了这个脚本,该文件夹将保存由
make_服务器创建的“database.fs”文件,并以不同的并行过程执行:

代码:

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()
Traceback (most recent call last):
  File "C:\Users\cbrown\Google Drive\EclipseWorkspace\NewSpectro - v1\20131202\2 - database\zeo.py", line 17, in <module>
    db = ZODB.DB(storage)
  File "C:\Python27\lib\site-packages\zodb-4.0.0-py2.7.egg\ZODB\DB.py", line 443, in __init__
    temp_storage.load(z64, '')
  File "C:\Python27\lib\site-packages\zeo-4.0.0-py2.7.egg\ZEO\ClientStorage.py", line 841, in load
    data, tid = self._server.loadEx(oid)
  File "C:\Python27\lib\site-packages\zeo-4.0.0-py2.7.egg\ZEO\ClientStorage.py", line 88, in __getattr__
    raise ClientDisconnected()
ClientDisconnected
------
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)
如果未给出
wait=False
,程序将仅在
ClientStorage
行阻塞

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

错误消息:

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()
Traceback (most recent call last):
  File "C:\Users\cbrown\Google Drive\EclipseWorkspace\NewSpectro - v1\20131202\2 - database\zeo.py", line 17, in <module>
    db = ZODB.DB(storage)
  File "C:\Python27\lib\site-packages\zodb-4.0.0-py2.7.egg\ZODB\DB.py", line 443, in __init__
    temp_storage.load(z64, '')
  File "C:\Python27\lib\site-packages\zeo-4.0.0-py2.7.egg\ZEO\ClientStorage.py", line 841, in load
    data, tid = self._server.loadEx(oid)
  File "C:\Python27\lib\site-packages\zeo-4.0.0-py2.7.egg\ZEO\ClientStorage.py", line 88, in __getattr__
    raise ClientDisconnected()
ClientDisconnected
------
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)

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

你应该使用适当的流程管理,简化你的生活。您可能希望了解,哪个可以负责运行/启动/停止您的应用程序和ZEO

否则,您需要了解将ZEO后台化的技巧——但当supervisor这样的流程管理工具为您这样做时,为什么还要麻烦呢


如果你对关系数据库管理有悟性,并且已经有一个可以处理的关系数据库——你也可以把它看作是一个非常好的ZODB(低级别)存储后端。

在Windows中,你应该在路径中使用双而不是单个。实现这一点的简单且可移植的方法是使用os.path.join()函数,例如

os.path.join('os.getcwd()','zeo','database.fs')
。否则,一个类似的代码对我来说可以正常工作。

在Windows上有相同的错误,在Linux上一切正常。。。 您的代码正常,要使其正常工作,请更改以下内容 C:\Python33\Lib\site packages\ZEO-4.0.0-py3.3.egg\ZEO\zrpc\trigger.py ln:235

self.trigger.send(b'x')

C:\Python33\Lib\site packages\ZEO-4.0.0-py3.3.egg\ZEO\zrpc\client.py ln:458:459-对它们进行注释

以下是这些台词:

if socktype != socket.SOCK_STREAM:

    continue    

一般来说(这是我第一次真正接触任何数据库)。我认为主管的想法是个好主意,但我很困惑——你认为我的问题是没有这个功能,还是只是一个让事情变得更简单的建议?