рдкрд░рд┐рдЪрдп
рд╕рд╛рдзрд╛рд░рдг рдХреБрдЮреНрдЬреА/рдорд╛рди рднрдгреНрдбрд╛рд░рдгрдХреЛ рдЙрджрд╛рд╣рд░рдг рд╣реЗрд░реМрдВ, рдЬрд╕реНрддреИ рдореЗрдордХреНрдпрд╛рдЪред рдпреЛ рд╕рд░рд▓ рд░реВрдкрдорд╛ рдбрд┐рдЬрд╛рдЗрди рдЧрд░рд┐рдПрдХреЛ рдЫ - рдбреЗрдЯрд╛ рдореЗрдореЛрд░реАрдорд╛ рднрдгреНрдбрд╛рд░ рдЧрд░рд┐рдПрдХреЛ рдЫ, рд╣реНрдпрд╛рд╢рдореНрдпрд╛рдк рд╕рдВрд░рдЪрдирд╛рдорд╛ред рддрд┐рдиреАрд╣рд░реВ рдПрдХ tcp рд╕рдХреЗрдЯ рдорд╛рд░реНрдлрдд рдкрд╣реБрдБрдЪ рдЧрд░рд┐рдиреНрдЫред Python рдорд╛, hashmap рдПрдХ рдирд┐рдпрдорд┐рдд рдбрд┐рдХреНрдЯ рд╣реЛред рдкрд╣реБрдБрдЪрдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА zeromq рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВред
рд╕рдорд╛рдпреЛрдЬрди
рдпреЛ рдкреНрдпрд╛рдХреЗрдЬ debian/ubuntu рдорд╛ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрди, рдХреЗрд╡рд▓ рдХрдиреНрд╕реЛрд▓рдорд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН
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, response) рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХреЛ рдЫ - рд╣рд╛рдореА рдЕрдиреБрд░реЛрдзрдХреЛ рд▓рд╛рдЧрд┐ рдкрд░реНрдЦрд┐рд░рд╣реЗрдХрд╛ рдЫреМрдВ, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкрдард╛рдЙрдБрджреИред рд╣рд╛рдореА рдЕрдиреБрд░реЛрдзрд▓рд╛рдИ рдкрд╛рд░реНрд╕ рдЧрд░реНрдЫреМрдВ рд░ рд▓реЗрдЦрдирдХреЛ рдорд╛рдорд▓рд╛рдорд╛ 'рдареАрдХ рдЫ', рд╡рд╛ рдбреЗрдЯрд╛рдХреЛ рд╕рд╛рде / рдкрдвреНрдиреЗ рдЕрд╡рд╕реНрдерд╛рдорд╛ рдХреБрдиреИ рдкрдирд┐ рд╣реЛрдЗрдиред
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 рдкреНрд░реЛрдЯреЛрдХрд▓ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдХреБрдЮреНрдЬреА-рдорд╛рди рднрдгреНрдбрд╛рд░рдгрдХреЛ рд╡рд┐рдХрд╛рд╕" рд▓реЗрдЦреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред
рд╕реНрд░реЛрдд: www.habr.com