Nheyo dzekushanda nezmq mupython, kugadzira kiyi iri nyore / kukosha chitoro

Nhanganyaya

Ngatitarisei muenzaniso weyakareruka kiyi / kukosha kuchengetedza, senge memcache. Yakagadzirwa zviri nyore - iyo data inochengetwa mundangariro, mune hashmap chimiro. Ivo vanowanikwa kuburikidza netcp socket. MuPython, hashmap chirevo chenguva dzose. Kuti tiwane tinoshandisa zeromq.

kuchinja

Kuisa pasuru iyi mu debian/ubuntu, ingo pinda mukoni
sudo apt-get install libzmq-dev
sudo pip install zmq

kodhi

Ngatinyorei kirasi yekushanda neserver yedu:
Mhando yezmq socket inoshandiswa ndeye REQ (REQuest, chikumbiro), tinotumira chikumbiro uye tinomirira mhinduro.
Kuchengeta uye kutumira chero mhando yedata panetiweki, isu tinoshandisa yakajairwa pickle module. Iro basa "protocol" ituple yezvakakosha zvitatu: (command, key, data)

import zmq
import pickle

class SuperCacher:
    def __init__(self):
        context = zmq.Context()
        self.socket = context.socket(zmq.REQ)
        self.socket.connect('tcp://127.0.0.1:43000')

    def get(self, key):
        self.socket.send(pickle.dumps(('get', key, None)))
        return pickle.loads(self.socket.recv())

    def set(self, key, data):
        self.socket.send(pickle.dumps(('set', key, data)))
        return self.socket.recv() == b'ok'
Shandisa

cache = SuperCacher ()
cache.set('kiyi', 'value')
cache.get('kiyi')

Sebasa remumba, vandudza kuita nekuwedzera kugona kudoma kero/chiteshi paunenge uchigadzira muenzaniso wekirasi.

Zvino ngatinyorei server pachayo.
Panguva ino socket REP(REPly, mhinduro) inoshandiswa - isu takamirira chikumbiro, kutumira mhinduro. Isu tinopfuudza chikumbiro uye topindura pamwe ne 'ok' mune yekunyora, kana nedata / Hapana kana iri nyaya yekuverenga.

import pickle
import json
import zmq

def run_daemon():
    memory = {}

    context = zmq.Context()
    socket = context.socket(zmq.REP)
    socket.bind('tcp://127.0.0.1:43000')

    while True:
        try:
            command, key, data = pickle.loads(socket.recv())
            if command == 'set':
                memory[key] = data
                socket.send(b'ok')
            elif command == 'get':
                result = memory.get(key, None)
                socket.send(pickle.dumps(result))
        except Exception as e:
            print(e)

if __name__ == '__main__':
    run_daemon()

Kuti tiedze zvose pamwe chete, tinotanga sevha nemurairo
python daemon.py

Mune inotevera tebhu, tanga python mune inopindirana modhi.

>>> from lib import SuperCacher
>>> cache=SuperCacher()
>>> cache.set('key', 'value')
True
>>> cache.get('key')
'value'

Oh chishamiso, chinoshanda! Iye zvino unogona kunyora zvakachengeteka mukutanga kwako "kuvandudzwa kwekiyi-kukosha kuchengetedza uchishandisa zmq protocol"

Source: www.habr.com

Voeg