python හි zmq සමඟ වැඩ කිරීමේ මූලික කරුණු, සරල යතුර/අගය ගබඩාවක් නිර්මාණය කිරීම

හැඳින්වීම

අපි බලමු memcache වැනි සරල යතුර/අගයක ආචයනයක උදාහරණයක්. එය සරලව නිර්මාණය කර ඇත - දත්ත මතකයේ, හැෂ්මැප් ව්‍යුහයක ගබඩා කර ඇත. ඒවා tcp socket හරහා ප්‍රවේශ වේ. Python හි, hashmap යනු සාමාන්‍ය ආඥාවකි. ප්රවේශය සඳහා අපි 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, ප්‍රතිචාරය) භාවිතා වේ - අපි ඉල්ලීම සඳහා බලා සිටිමු, ප්‍රතිචාරයක් යවමු. අපි ඉල්ලීම විග්‍රහ කර ලිවීමේදී 'හරි' ලෙස ප්‍රතිචාර දක්වන්නෙමු, නැතහොත් කියවීමේදී දත්ත / කිසිවක් නැත.

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

අදහස් එක් කරන්න