ရိုးရှင်းသောသော့/တန်ဖိုးစတိုးကို ဖန်တီးခြင်း၊ python တွင် zmq ဖြင့် လုပ်ဆောင်ခြင်း၏ အခြေခံ

နိဒါန်း

memcache ကဲ့သို့သော ရိုးရှင်းသောသော့/တန်ဖိုး သိုလှောင်မှု၏ ဥပမာကို ကြည့်ကြပါစို့။ ၎င်းကို ရိုးရှင်းစွာ ဒီဇိုင်းထုတ်ထားသည် - ဒေတာကို hashmap ဖွဲ့စည်းပုံတွင် သိမ်းဆည်းထားသည်။ ၎င်းတို့ကို tcp socket မှတဆင့်ဝင်ရောက်သည်။ Python တွင်၊ hashmap သည် ပုံမှန် dict တစ်ခုဖြစ်သည်။ ဝင်ရောက်အသုံးပြုရန်အတွက် zeromq ကိုအသုံးပြုပါမည်။

သင့်အောင်လုပ်ခြင်း

ဤပက်ကေ့ဂျ်ကို debian/ubuntu တွင် ထည့်သွင်းရန်၊ ကွန်ဆိုးလ်တွင်သာ ထည့်သွင်းပါ။
sudo apt-get install libzmq-dev
sudo pip install zmq

ကုဒ်

ကျွန်ုပ်တို့၏ဆာဗာနှင့်အလုပ်လုပ်ရန် အတန်းတစ်ခုရေးလိုက်ကြပါစို့။
အသုံးပြုထားသော zmq socket အမျိုးအစားမှာ REQ(REQuest၊ တောင်းဆိုချက်) ဖြစ်သည်၊ ကျွန်ုပ်တို့သည် တောင်းဆိုချက်တစ်ခုကို ပေးပို့ပြီး တုံ့ပြန်မှုကို စောင့်ပါ။
ကွန်ရက်ပေါ်ရှိ မည်သည့်ဒေတာအမျိုးအစားကိုမဆို သိမ်းဆည်းပြီး ပို့လွှတ်ရန်၊ ကျွန်ုပ်တို့သည် စံပယ်ပန်း module ကို အသုံးပြုပါသည်။ အလုပ် “ပရိုတိုကော” သည် တန်ဖိုးသုံးမျိုး၏ tuple တစ်ခုဖြစ်သည်- (အမိန့်စာ၊ သော့၊ ဒေတာ)

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('ကီး')

အိမ်စာအနေဖြင့် အတန်းတစ်ခု၏ဥပမာတစ်ခုဖန်တီးသောအခါတွင် လိပ်စာ/ပို့တ်ကို သတ်မှတ်နိုင်စွမ်းကို ပေါင်းထည့်ခြင်းဖြင့် အကောင်အထည်ဖော်မှုကို မြှင့်တင်ပါ။

အခု server ကိုယ်တိုင်ရေးကြည့်ရအောင်။
ဤတစ်ကြိမ်တွင် socket 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()

အားလုံးအတူတကွစမ်းသပ်ရန်ကျွန်ုပ်တို့သည် command ဖြင့်ဆာဗာကိုစတင်ပါ။
python daemon.py

နောက်တဘ်တွင်၊ အပြန်အလှန်အကျိုးသက်ရောက်မှုမုဒ်တွင် python ကိုဖွင့်ပါ။

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

အိုး အံ့ဖွယ်၊ အဲဒါ အလုပ်လုပ်တယ်။ ယခု သင်သည် zmq ပရိုတိုကောကို အသုံးပြု၍ သင်၏ကိုယ်ရေးမှတ်တမ်းတွင် “သော့တန်ဖိုးသိုလှောင်မှု ဖွံ့ဖြိုးတိုးတက်မှု” ကို လုံခြုံစွာရေးနိုင်ပြီဖြစ်သည်။

source: www.habr.com

မှတ်ချက် Add