рдкрд░рд┐рдЪрдп
рдЖрдЗрдП рдПрдХ рд╕рд░рд▓ рдХреБрдВрдЬреА/рдореВрд▓реНрдп рд╕рдВрдЧреНрд░рд╣рдг рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ, рдЬреИрд╕реЗ рдХрд┐ рдореЗрдордХреИрдЪред рдпрд╣ рд╕рд░рд▓ рд╣реИ - рдбреЗрдЯрд╛ рдореЗрдореЛрд░реА рдореЗрдВ, рд╣реИрд╢рдореИрдк рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрди рддрдХ рдкрд╣реБрдБрдЪ рдПрдХ tcp рд╕реЙрдХреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрддреА рд╣реИред рдкрд╛рдпрдерди рдореЗрдВ, рд╣реИрд╢рдореИрдк рдПрдХ рдирд┐рдпрдорд┐рдд рдбрд┐рдХреНрдЯ рд╣реИред рд╣рдо рдкрд╣реБрдБрдЪ рдХреЗ рд▓рд┐рдП 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'
рдЙрдкрдпреЛрдЧ
рдХреИрд╢ = рд╕реБрдкрд░рдХреИрдЪрд░()
рдХреИрд╢.рд╕реЗрдЯ('рдХреБрдВрдЬреА', 'рдореВрд▓реНрдп')
рдХреИрд╢.get('рдХреБрдВрдЬреА')
рд╣реЛрдорд╡рд░реНрдХ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ, рдХреНрд▓рд╛рд╕ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддреЗ рд╕рдордп рдкрддрд╛/рдкреЛрд░реНрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рдХрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░реЗрдВред
рдЕрдм рд╣рдо рдЗрд╕реЗ рдЦреБрдж рд▓рд┐рдЦреЗрдВрдЧреЗред рд╕реЗрд╡рдХ.
рдЗрд╕ рдмрд╛рд░, REP(REPly, response) рд╕реЙрдХреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рд╣рдо рдЕрдиреБрд░реЛрдз рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рднреЗрдЬрддреЗ рд╣реИрдВред рд╣рдо рдЕрдиреБрд░реЛрдз рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддреЗ рд╣реИрдВ, рд▓рд┐рдЦрдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ 'ok' рдХреЗ рд╕рд╛рде рдпрд╛ рдкрдврд╝рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ data / None рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрддреЗ рд╣реИрдВред
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
