python เจตเจฟเฉฑเจš zmq เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฆเฉ€เจ†เจ‚ เจฌเฉเจจเจฟเจ†เจฆเฉ€ เจ—เฉฑเจฒเจพเจ‚, เจ‡เฉฑเจ• เจธเจงเจพเจฐเจจ เจ•เฉเฉฐเจœเฉ€/เจฎเฉเฉฑเจฒ เจธเจŸเฉ‹เจฐ เจฌเจฃเจพเจ‰เจฃเจพ

เจœเจพเจฃ เจชเจ›เจพเจฃ

เจ†เจ‰ เจ‡เฉฑเจ• เจธเจงเจพเจฐเจจ เจ•เฉเฉฐเจœเฉ€/เจฎเฉเฉฑเจฒ เจธเจŸเฉ‹เจฐเฉ‡เจœเจผ เจฆเฉ€ เจ‡เฉฑเจ• เจ‰เจฆเจพเจนเจฐเจจ เจตเฉ‡เจ–เฉ€เจ, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจฎเฉ‡เจฎเจ•เฉˆเจธเจผเฅค เจ‡เจน เจธเจงเจพเจฐเจจ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจคเจฟเจ†เจฐ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ - เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจฎเฉˆเจฎเฉ‹เจฐเฉ€ เจตเจฟเฉฑเจš, เจนเฉˆเจธเจผเจฎเฉˆเจช เจขเจพเจ‚เจšเฉ‡ เจตเจฟเฉฑเจš เจธเจŸเฉ‹เจฐ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• tcp เจธเจพเจ•เจŸ เจฆเฉเจ†เจฐเจพ เจเจ•เจธเฉˆเจธ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค เจชเจพเจˆเจฅเจจ เจตเจฟเฉฑเจš, เจนเฉˆเจธเจผเจฎเฉˆเจช เจ‡เฉฑเจ• เจจเจฟเจฏเจฎเจฟเจค เจกเจฟเจ•เจŸ เจนเฉˆเฅค เจชเจนเฉเฉฐเจš เจฒเจˆ เจ…เจธเฉ€เจ‚ zeromq เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจพเจ‚เจ—เฉ‡เฅค

เจตเจฟเจตเจธเจฅเจพ

เจ‡เจธ เจชเฉˆเจ•เฉ‡เจœ เจจเฉ‚เฉฐ เจกเฉ‡เจฌเฉ€เจ…เจจ/เจ‰เจฌเฉฐเจŸเฉ‚ เจตเจฟเฉฑเจš เจธเจฅเจพเจชเจค เจ•เจฐเจจ เจฒเจˆ, เจธเจฟเจฐเจซเจผ เจ•เฉฐเจธเฉ‹เจฒ เจตเจฟเฉฑเจš เจฆเจพเจ–เจฒ เจนเฉ‹เจตเฉ‹
sudo apt-get install libzmq-dev
sudo pip install zmq

เจ•เฉ‹เจก

เจ†เจ‰ เจธเจพเจกเฉ‡ เจธเจฐเจตเจฐ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฒเจˆ เจ‡เฉฑเจ• เจ•เจฒเจพเจธ เจฒเจฟเจ–เฉ€เจ:
เจตเจฐเจคเฉ‡ เจ—เจ zmq เจธเจพเจ•เจŸ เจฆเฉ€ เจ•เจฟเจธเจฎ REQ (เจฌเฉ‡เจจเจคเฉ€, เจฌเฉ‡เจจเจคเฉ€) เจนเฉˆ, เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจฌเฉ‡เจจเจคเฉ€ เจญเฉ‡เจœเจฆเฉ‡ เจนเจพเจ‚ เจ…เจคเฉ‡ เจœเจตเจพเจฌ เจฆเฉ€ เจ‰เจกเฉ€เจ• เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚เฅค
เจจเฉˆเฉฑเจŸเจตเจฐเจ• เจ‰เฉฑเจคเฉ‡ เจ•เจฟเจธเฉ‡ เจตเฉ€ เจ•เจฟเจธเจฎ เจฆเฉ‡ เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจธเจŸเฉ‹เจฐ เจ•เจฐเจจ เจ…เจคเฉ‡ เจชเฉเจฐเจธเจพเจฐเจฟเจค เจ•เจฐเจจ เจฒเจˆ, เจ…เจธเฉ€เจ‚ เจธเจŸเฉˆเจ‚เจกเจฐเจก เจ…เจšเจพเจฐ เจฎเฉ‹เจกเฉ€เจŠเจฒ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚เฅค เจ•เฉฐเจฎ "เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ" เจคเจฟเฉฐเจจ เจฎเฉเฉฑเจฒเจพเจ‚ เจฆเจพ เจ‡เฉฑเจ• เจŸเฉเจชเจฒ เจนเฉˆ: (เจ•เจฎเจพเจ‚เจก, เจ•เฉเฉฐเจœเฉ€, เจกเฉ‡เจŸเจพ)

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'
เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเฉ‹

เจ•เฉˆเจธเจผ = เจธเฉเจชเจฐ เจ•เฉˆเจšเจฐ ()
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

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹