Pythonda zmq bilan ishlash asoslari, oddiy kalit/qiymatlar do'konini yaratish

kirish

Keling, memcache kabi oddiy kalit/qiymat saqlash misolini ko'rib chiqaylik. U sodda tarzda yaratilgan - ma'lumotlar xotirada, xashmap tuzilishida saqlanadi. Ularga tcp rozetkasi orqali kirish mumkin. Pythonda xashmap oddiy diktdir. Kirish uchun biz zeromq dan foydalanamiz.

moslashish

Ushbu paketni debian/ubuntu-ga o'rnatish uchun konsolga kiring
sudo apt-get install libzmq-dev
sudo pip install zmq

da

Serverimiz bilan ishlash uchun sinf yozamiz:
Amaldagi zmq rozetkasining turi REQ(REQuest, so'rov) bo'lib, biz so'rov yuboramiz va javobni kutamiz.
Tarmoq orqali har qanday turdagi ma'lumotlarni saqlash va uzatish uchun biz standart tuzlangan moduldan foydalanamiz. Ish "protokoli" uchta qiymatdan iborat: (buyruq, kalit, ma'lumotlar)

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

kesh = SuperCacher()
cache.set('kalit', 'qiymat')
cache.get('kalit')

Uy vazifasi sifatida sinf namunasini yaratishda manzil/portni ko'rsatish qobiliyatini qo'shish orqali amalga oshirishni yaxshilang.

Endi serverning o'zini yozamiz.
Bu safar REP (REPly, javob) soketidan foydalanildi - biz so'rovni kutmoqdamiz, javob yuboramiz. Biz so'rovni tahlil qilamiz va yozishda "ok" bilan yoki o'qish holatida ma'lumotlar / Yo'q bilan javob beramiz.

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

Hamma narsani birgalikda sinab ko'rish uchun biz serverni buyruq bilan ishga tushiramiz
python daemon.py

Keyingi yorliqda python-ni interaktiv rejimda ishga tushiring.

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

Oh, mo''jiza, u ishlaydi! Endi siz o'zingizning rezyumeingizga "zmq protokoli yordamida kalit-qiymatni saqlashni ishlab chiqish" deb ishonch bilan yozishingiz mumkin.

Manba: www.habr.com

a Izoh qo'shish