2007-04-18

Python wrappers for memcache

Jeśli szukasz modułu do pythona, którym połączysz się do memcached, to najprostszym będzie python-memcached. Jest on prosty, stabilny, i po prostu działa.

Problem zaczyna się później w memcache.py:_Host.readline()


def readline(self):
buffers = ''
recv = self.socket.recv
while 1:
data = recv(1)
[...]

Tak, tak. python-memcache czyta z socketa po jednym bajcie. To był główny powód zainteresowania wrapperem pythona do libmemcache, czyli cmemcache.

Niestety cmemcache jest trochę niedorobiony. Jest to wina libmemcache, który w niektórych przypadkach potrafi brutalnie wywołać exit(). A nie jest to miłe, gdy proces pythona zdycha od jakiegoś głupiego błędu na socketach. Napisałem patch do libmemcache.
Drugim problemem jest to, że api cmemcache jest troszeczkę inne niż python-memcached. Na przykład "set" zwraca -1 lub 0, zamiast 0 lub 1. Naprawiliśmy to banalnym patchem do cmemcache.


PS. W nowym python-memcached już nie robią recv(1), oto odpowiedni fragment kodu:

def readline(self):
buf = self.buffer
recv = self.socket.recv
while True:
index = buf.find('\r\n')
if index >= 0:
break
data = recv(4096)


No comments: