рдкрд░рд┐рдЪрдп
рдЖрдЗрдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХреБрдВрдЬреА / рдорд╛рди рднрдВрдбрд╛рд░рдг рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ, рдЬреИрд╕реЗ рдХрд┐ рдореЗрдореЗрдЪреЗред рдпрд╣ рдмрд╕ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реИ - рдбреЗрдЯрд╛ рдореЗрдореЛрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣реИрд╢рдореИрдк рд╕рдВрд░рдЪрдирд╛ рдореЗрдВред рдЙрди рддрдХ рдкрд╣реБрдВрдЪ рдПрдХ tcp рд╕реЙрдХреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрддреА рд╣реИред рдЕрдЬрдЧрд░ рдореЗрдВ, рд╣реИрд╢рдореИрдк рдПрдХ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рддрд╛рдирд╛рд╢рд╛рд╣реА рд╣реИред рдПрдХреНрд╕реЗрд╕ рдХреЗ рд▓рд┐рдП рд╣рдо zeromq рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рд╕рдорд╛рдпреЛрдЬрди
рдЗрд╕ рдкреИрдХреЗрдЬ рдХреЛ рдбреЗрдмрд┐рдпрди / 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'
рдХреЗ рдЙрдкрдпреЛрдЧ
рдХреИрд╢ = рд╕реБрдкрд░ рдХреИрдЪрд░ ()
cache.set ('рдХреБрдВрдЬреА', 'рдореВрд▓реНрдп')
cache.get ('рдХреБрдВрдЬреА')
рд╣реЛрдорд╡рд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ, рдХрдХреНрд╖рд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддреЗ рд╕рдордп рдкрддрд╛ / рдкреЛрд░реНрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░реЗрдВред
рдЕрдм рд╣рдо рд╕рд░реНрд╡рд░ рдХреЛ рд╣реА рд▓рд┐рдЦреЗрдВрдЧреЗред
рдЗрд╕ рд╕рдордп, рдЖрд░рдИрдкреА рд╕реЙрдХреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЖрд░рдИрдкреАрд▓реА, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛) - рд╣рдо рдЕрдиреБрд░реЛрдз рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╣реЗрд▓рдореЗрдЯ рдЬрд╡рд╛рдм рд╣реИред рд╣рдо рдЕрдиреБрд░реЛрдз рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдЦрди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╛ рддреЛ 'рдУрдХреЗ' рдХрд╛ рдЙрддреНрддрд░ рджреЗрддреЗ рд╣реИрдВ, рдпрд╛ рдбреЗрдЯрд╛ / рдкрдврд╝рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреЛрдИ рдирд╣реАрдВред
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
рдЕрдЧрд▓реЗ рдЯреИрдм рдореЗрдВ, рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рд░реВрдк рд╕реЗ рдЕрдЬрдЧрд░ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред
>>> from lib import SuperCacher >>> cache=SuperCacher() >>> cache.set('key', 'value') True >>> cache.get('key') 'value'
рдУрд╣ рдЪрдорддреНрдХрд╛рд░, рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ! рдЕрдм рдЖрдк рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рд░рд┐рдЬреНрдпреВрдо рдореЗрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ "zmq рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреБрдВрдЬреА-рдореВрд▓реНрдп рдХрд╛ рднрдВрдбрд╛рд░рдг рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛"