рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╣рд┐рдЯ

рдЫрд╡рд┐ рдЬреИрд╕рд╛ рдХрд┐ рдХрд┐рд╕реА рдиреЗ рд╢рд╛рдпрдж рдкрд╣рд▓реЗ рд╣реА рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдерд╛, рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рд╕реЙрдХреЗрдЯреНрд╕, рдФрд░ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддреЗ рд╣реИрдВред рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореИрдВрдиреЗ рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛, рдПрдХ рдСрдирд▓рд╛рдЗрди рдЧреЗрдо рдкрд░ рдХрд╛рдо рд╢реБрд░реВ рдХрд┐рдпрд╛ред рдРрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп рдХрд╛рдлреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдмрд╛рд░реА-рдЖрдзрд╛рд░рд┐рдд рд░рдгрдиреАрддрд┐ рдирд╣реАрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рднреА, рд╢рд╛рдпрджред рддреЛ рдпрд╣ рдЧрдВрднреАрд░ рд╕рдВрд╕рд╛рдзрди рдмрд╛рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

рдореБрдЦреНрдп рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдИ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рддрд╛ рд╣реИ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рд╕рд╛рдорд╛рдиреНрдп рдЕрдЬрд╛рдХреНрд╕ рдЕрдиреБрд░реЛрдз рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВред рдЗрд╕рд▓рд┐рдП, рд╕реЙрдХреЗрдЯ рд╣рдорд╛рд░реА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрддреЗ рд╣реИрдВред

Predystoiya

рдЦреЗрд▓ рдлреНрд▓реИрд╢ рдкрд░ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЬреЗрдПрд╕ рдХреЛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕реЙрдХреЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЗрд╕рд▓рд┐рдП рдЖрдк рдПрдХ рдлреНрд▓реИрд╢ рд╕рдмреНрд╕рдЯреНрд░реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рдирд┐рдкрдЯреЗрдВрдЧреЗред рдпрд╣рд╛рдБ рдПрдХ рдЫреЛрдЯреА рд╕реА рдЬрд╕реНрдХреЗрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣рдорд╛рд░реА рдорджрдж рдХрд░реЗрдЧреАред
рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдзреНрдпрд╛рди рдореБрдбрд╝ рдЧрдпрд╛, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХреБрдЫ рд▓рд┐рдЦрдирд╛ рднреА рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рдкрд╣рд╛рдбрд╝ рдЦреЛрдЬрд╛, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдЬрд┐рдпреЛрд╡реЗрдВрдЯ рдФрд░ рдмрд╡рдВрдбрд░ рдХреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдкрд╕рдВрдж рдХрд┐рдпрд╛ред рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЦреЛрдЬрдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд▓реЗрдЦ рдорд┐рд▓рд╛, рдФрд░ рдмрд╛рдж рдореЗрдВ рдпрд╣ рдПрдХ ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рдЬреЛ рдЪрд╛рд╣рд┐рдП, рдЙрд╕рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рдХрд╛рд░реНрдп рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЕрдкрдирд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред

рд╕реНрдХреНрд░рд┐рдкреНрдЯ

рд╣рдо рдореБрдбрд╝ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдЧреНрд░рд╛рд╣рдХ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВред

from twisted.internet.protocol import ClientFactory from twisted.protocols.basic import LineReceiver from twisted.internet import epollreactor epollreactor.install() from twisted.internet import reactor import sys,time clients=30000 host='127.0.0.1' port=8001 file = open( 'log.dat', 'w') class glob(): connections=0 crefuse=0 clost=0 def enchant(self): self.connections+=1 def refuse(self): self.crefuse+=1 def lost(self): self.clost+=1 a=glob() class EchoClient(LineReceiver): measure=True def connectionMade(self): self.sendLine("Hello, world!") self.t1 = time.time() def lineReceived(self, line): if self.measure: self.t2 = time.time() - self.t1 file.write('%s %s %s %s %s\n' % (a.connections+1,self.t2,a.crefuse,a.clost,line)) self.measure=False if a.connections+1 < clients: a.enchant() reactor.connectTCP(host, port, EchoClientFactory()) else: self.transport.loseConnection() class EchoClientFactory(ClientFactory): protocol = EchoClient def clientConnectionFailed(self, connector, reason): a.refuse() def clientConnectionLost(self, connector, reason): a.lost() def main(): f = EchoClientFactory() reactor.connectTCP(host, port, f) reactor.run() file.close() if __name__ == '__main__': main() 

рдФрд░ рд╣рд░ рдврд╛рдВрдЪреЗ рдкрд░ рдПрдХ рд╕рд░реНрд╡рд░ред

gevent

 clients=[] host='' port = 8001 def echo(socket, address): clients.append(socket) while True: line = socket.recv(1024) for client in clients: try: client.send(str(len(clients))+'\r\n') except: clients.remove(client) if __name__ == '__main__': from gevent.server import StreamServer StreamServer((host, port), echo).serve_forever() 


рдмрд╡рдВрдбрд░

 import errno import functools import socket from tornado import ioloop, iostream host='' port = 8001 clients=[] class Connection(object): def __init__(self, connection): clients.append(self) self.stream = iostream.IOStream(connection) self.read() def read(self): self.stream.read_until('\r\n', self.eol_callback) def eol_callback(self, data): for c in clients: try: c.stream.write(str(len(clients))+'\r\n') except: clients.remove(c) self.read() def connection_ready(sock, fd, events): while True: try: connection, address = sock.accept() except socket.error, e: if e[0] not in (errno.EWOULDBLOCK, errno.EAGAIN): raise return connection.setblocking(0) Connection(connection) if __name__ == '__main__': sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.setblocking(0) sock.bind((host, port)) sock.listen(30000) io_loop = ioloop.IOLoop.instance() callback = functools.partial(connection_ready, sock) io_loop.add_handler(sock.fileno(), callback, io_loop.READ) try: io_loop.start() except KeyboardInterrupt: io_loop.stop() print "exited cleanly" 


рдореБрдбрд╝

 from twisted.protocols import basic class MyChat(basic.LineReceiver): def connectionMade(self): self.factory.clients.append(self) def connectionLost(self, reason): self.factory.clients.remove(self) def dataReceived(self, line): for c in self.factory.clients: c.message(str(len(factory.clients))+'\r\n') def message(self, message): self.transport.write(message) from twisted.internet import epollreactor epollreactor.install() from twisted.internet import reactor, protocol from twisted.application import service, internet factory = protocol.ServerFactory() factory.protocol = MyChat factory.clients = [] reactor.listenTCP(8001,factory) reactor.run() 


рдереЛрдбрд╝рд╛ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдордиреЗ рдПрдХ рдЪреИрдЯ рд╕рд░реНрд╡рд░ рдмрдирд╛рдпрд╛ рд╣реИред рдЬреИрд╕реЗ рд╣реА рд╕рд░реНрд╡рд░ рдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдПрдХ рд▓рд╛рдЗрди рдорд┐рд▓рддреА рд╣реИ, рдпрд╣ рдЗрд╕ рд▓рд╛рдЗрди рдХреЛ рд╕рднреА рдХрдиреЗрдХреНрдЯреЗрдб рдХреНрд▓рд╛рдЗрдВрдЯреНрд╕ рдХреЛ рднреЗрдЬрддрд╛ рд╣реИ (рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╣рдо рдХрдиреЗрдХреНрдЯреЗрдб рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рд╕рдВрдЦреНрдпрд╛ рднреЗрдЬрддреЗ рд╣реИрдВ)ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рднрд╛рд░ рдЕрдВрдХрдЧрдгрд┐рддреАрдп рд░реВрдк рд╕реЗ рдмрдврд╝ рдЬрд╛рддрд╛ рд╣реИред рдХреНрд▓рд╛рдЗрдВрдЯ, рдмрджрд▓реЗ рдореЗрдВ, рд╕рд░реНрд╡рд░ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдФрд░ рдЙрд╕рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмреАрдЪ рдмреАрддрд╛ рд╕рдордп рдХреЛ рдорд╛рдкрддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░рд╛ рд╡рд░реНрддрдорд╛рди рдЧреНрд░рд╛рд╣рдХ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд┐рдо рдерд╛, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рд╕рдордп рддрдХ рд╕рднреА рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдкрд╣рд▓реЗ рд╣реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдорд┐рд▓ рдЬрд╛рдПрдЧреАред

рдорд╛рдк рдХреЗ рджреМрд░рд╛рди, рдореИрдВрдиреЗ рдХрдиреЗрдХреНрдЯреЗрдб рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп рд▓рд┐рдпрд╛ред рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЛ рдПрдХ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдкрд░ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдорд╢реАрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдбреЗрд╕реНрдХрдЯреЙрдк рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо рдереЛрдбрд╝рд╛ рд╡рд┐рдХреГрдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рд╛рд░ рд╕реНрдкрд╖реНрдЯ рд╣реИред рдпрд╣ 30,000 рдХрдиреЗрдХреНрд╢рди рддрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдорд╛рдкрдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рдереА, рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рддреАрдиреЛрдВ рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рд▓рдВрдмрд╛ рд╣реЛ рдЧрдпрд╛ред
рдЫрд╡рд┐
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЕрдХреНрд╖ рдкрд░, рд╕рдордп, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╕реЗрдХрдВрдб рдореЗрдВ рд╣реИред
рдмрд╡рдВрдбрд░ рдЧреНрд░рд╛рдл рджреЛ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдпреЗ рджреЛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ, рд╕рд┐рд░реНрдл рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рддрд░рд╣ рдХреЗ рд╣реИрдВ:
11476 2.45670819283
11477 0.405035018921
11478 2.42619085312
11479 0.392680883408
11480 2.5216550827
11481 0.401995897293

рдЬрд╣рд╛рдВ рдкрд╣рд▓рд╛ рдирдВрдмрд░ рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдХрд┐рд╕рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖

рдореИрдВ рдХрд╛рд░реНрдп рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рднреА рдкреЗрд╢реЗрд╡рд░реЛрдВ рдФрд░ рд╡рд┐рдкрдХреНрд╖реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджреЗрддрд╛ рд╣реВрдВ
Gevent


рдореБрдбрд╝


рдмрд╡рдВрдбрд░


рдЦреИрд░, рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рд╕реЗ, рд╣рд░ рдХреЛрдИ рдЕрдкрдиреЗ рд▓рд┐рдП рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдЕрдкрдиреЗ рдФрд░ рдЕрдкрдиреЗ рдХрд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдпреЛрд╡реЗрдВрдЯ рдЪреБрдиреВрдВрдЧрд╛ред

рдпреБрдкреАрдбреАред рдЬрд┐рдпреЛрд╡реЗрдВрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рдЧрд▓рдд рд╣реИред рдЙрд╕ рдкрд░ рднрд╛рд░ рдХрдо рдерд╛ред рдореИрдВрдиреЗ рдЗрд╕реЗ рдорд╛рдкрд╛, рдкрд░рд┐рдгрд╛рдо рдереЛрдбрд╝рд╛ рдЦрд░рд╛рдм рдирд┐рдХрд▓рд╛, рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд░рд╣рд╛ред рдпрд╣рд╛рдБ рдирдореВрдирд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИрдВ:
10336 1.01536607742 0 0 10338
10337 0.955881118774 0 0 10339
10338 0.947958946228 0 0 10340
10339 1.02578997612 0 0 10341

Source: https://habr.com/ru/post/In117918/


All Articles