Python тілінде zmq-мен жұмыс істеу негіздері, қарапайым кілт/мән қоймасын құру

Кіріспе

Memcache сияқты қарапайым кілт/мәнді сақтаудың мысалын қарастырайық. Ол қарапайым жобаланған - деректер жадта, хэшмап құрылымында сақталады. Оларға tcp ұясы арқылы қол жеткізіледі. Python тілінде хэшмап - бұл кәдімгі дикт. Қол жеткізу үшін біз zeromq қолданамыз.

реттеу

Бұл пакетті debian/ubuntu жүйесінде орнату үшін консольге кіріңіз
sudo apt-get install libzmq-dev
sudo pip install zmq

код

Сервермен жұмыс істеу үшін класс жазайық:
Қолданылатын zmq ұяшығының түрі REQ(REQuest, request) болып табылады, біз сұрау жібереміз және жауапты күтеміз.
Желі арқылы деректердің кез келген түрін сақтау және беру үшін біз стандартты тұздық модулін қолданамыз. Жұмыс «протоколы» үш мәннен тұратын кортеж болып табылады: (команда, кілт, деректер)

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'
Пайдаланыңыз

кэш = SuperCacher()
cache.set('кілт', 'мән')
cache.get('кілт')

Үй тапсырмасы ретінде сынып данасын жасау кезінде мекенжай/портты көрсету мүмкіндігін қосу арқылы іске асыруды жақсартыңыз.

Енді сервердің өзін жазайық.
Бұл жолы REP (REPly, жауап) розеткасы пайдаланылады - біз сұрауды күтеміз, жауап жібереміз. Біз сұрауды талдаймыз және жазған жағдайда «ok» деп жауап береміз, немесе оқылған жағдайда деректермен / Ешбір.

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

Барлығын бірге тексеру үшін серверді пәрменмен бастаймыз
python daemon.py

Келесі қойындыда python бағдарламасын интерактивті режимде іске қосыңыз.

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

О, керемет, ол жұмыс істейді! Енді сіз резюмеңізге «zmq протоколы арқылы кілт-мәнді сақтауды әзірлеу» деп қауіпсіз жаза аласыз.

Ақпарат көзі: www.habr.com

пікір қалдыру