[cpif] Parch para que el backend BerkeleyDB funcione en Windows
Sergio Álvarez
listas at xergio.net
Thu May 10 16:42:25 CEST 2007
Buenas a todos.
Jesús, aquí tienes un pequeño patch para que tu backend rule en
windows. Era cosa tan solo del lock. Es todo tuyo ;) aunque fijo que
quieres retocarlo más a tu estilo de programación. Eres libre,
toquetea lo que sea. Mando además los tests del CPIF:
Grabar esto en un archivo llamado __berkeleydb_storage.py:
--- __berkeleydb_storage.py 2007-05-10 16:25:22.328125000 +0200
+++ berkeleydb_storage.py 2007-05-10 16:33:44.734375000 +0200
@@ -467,19 +467,39 @@
else :
garbage_collection_method=garbage_collection_inline_prefetch
+
import os
- import fcntl
assert directoryname
- self._lock=os.open(directoryname+os.sep+"storage.lock",os.O_RDWR
| os.O_CREAT,0600)
+ storagelock = directoryname+os.sep+"storage.lock"
try :
- flags=fcntl.LOCK_EX
- if read_only :
- flags=fcntl.LOCK_SH
- fcntl.flock(self._lock,flags | fcntl.LOCK_NB)
+ if os.name == 'nt':
+ if os.path.exists(storagelock):
+ if read_only:
+ fomode = 'rb'
+ else:
+ fomode = 'r+b'
+ else:
+ fomode = 'w+b'
+ self._lock = open(storagelock, fomode)
+ # this part of code is inspired in durus/file.py
+ import win32con, win32file, pywintypes
+ win32file.LockFileEx(
+ win32file._get_osfhandle(self._lock.fileno()),
+ (win32con.LOCKFILE_EXCLUSIVE_LOCK |
+ win32con.LOCKFILE_FAIL_IMMEDIATELY),
+ 0, -65536, pywintypes.OVERLAPPED())
+ else:
+ self._lock=os.open(storagelock,os.O_RDWR | os.O_CREAT,0600)
+ import fcntl
+ flags=fcntl.LOCK_EX
+ if read_only :
+ flags=fcntl.LOCK_SH
+ fcntl.flock(self._lock,flags | fcntl.LOCK_NB)
except :
os.close(self._lock)
raise RuntimeError("'%s' storage already locked" %directoryname)
+
def config_dbenv() :
dbenv=bsddb.db.DBEnv()
dbenv.set_cachesize(0,cachesize)
Tests:
C:\_xergio\_p\_py\cpif\tests>python ejemplo2.py
Commit inicial...
Realizamos 89.887640 inserciones por segundo
En un caso muy pesimista, tenemos 44.290903 actualizaciones de hilos
no leidos por segundo
C:\_xergio\_p\_py\cpif\tests>python ejemplo1.py
Commit inicial...
Realizamos 170.648467 inserciones por segundo
En un caso muy pesimista, tenemos 71.194646 actualizaciones de hilos
no leidos por segundo
Saludos.
--
Sergio Álvarez Muñoz (xergio)
León-Madrid - Spain
email: mail at xergio.net
xmpp: xergio at jabberland.com
web: http://xergio.net
More information about the cpif
mailing list