Aasaaska la shaqaynta zmq ee Python, abuurista dukaanka furaha/qiimaha fudud

Horudhac

Aynu eegno tusaale kaydinta furaha/qiimaha fudud, sida memcache. Si fudud ayaa loo qaabeeyey - xogta waxa lagu kaydiyaa xusuusta, qaab-dhismeedka hashmap. Waxa laga galaa godad tcp ah. Python dhexdeeda, hashmapku waa dict joogto ah. Helitaanka waxaan isticmaali doonaa zeromq.

sixitaanka

Si aad xirmadan ugu rakibto debian/ubuntu, kaliya geli console-ka
sudo apt-get install libzmq-dev
sudo pip install zmq

Code

Aynu qorno fasal si aan ula shaqayno server-keena:
Nooca socket-ka zmq ee la isticmaalo waa REQ (REQest, request), waxaan dirnaa codsi waxaanan sugeynaa jawaab.
Si loo kaydiyo loona gudbiyo nooc kasta oo xog ah shabakada, waxaanu isticmaalnaa cutubka caadiga ah ee pickle. Shaqada "protocol" waa tuple ka kooban saddex qiyam: (amar, fure, xog)

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'
Isticmaal

kayd = SuperCacher()
cache.set ('furaha', 'qiimaha')
cache.get ('furaha')

Shaqada-guri ahaan, wanaaji hirgelinta adigoo ku daraya awoodda lagu qeexo ciwaanka/dekedda marka la abuurayo tusaale fasalka.

Hadda aan qorno server-ka laftiisa.
Markan godka REP (REPly, jawaab) ayaa la isticmaalaa - waxaan sugeynaa codsiga, diritaanka jawaab. Codsiga waanu kala soocnay oo kaga jawaabnaa 'ok' hadday tahay qoraal, ama xog/Ma jirto xaalad akhris.

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()

Si loo tijaabiyo wax walba, waxaan ku bilownaa server-ka amarka
python daemon.py

Tabta xigta, ku billow Python qaabka is dhexgal

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

Alla mucjiso, way shaqeysaa! Hadda waxaad si badbaado leh ugu qori kartaa resumeygaaga "horumarinta kaydinta qiimaha muhiimka ah adoo isticmaalaya borotokoolka zmq"

Source: www.habr.com

Add a comment