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