| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 | import multiprocessingimport osimport platformimport socketfrom aiohttp import webfrom .main import create_appSERVERS_COUNT = multiprocessing.cpu_count()BACKLOG = 2048SOCKET_BACKLOG = BACKLOG * SERVERS_COUNTdef start_server(sock, cpu_id):    if hasattr(os, "sched_setaffinity"):        os.sched_setaffinity(0, {cpu_id})    if platform.python_implementation() != "PyPy":        import uvloop        uvloop.install()    app = create_app()    web.run_app(app, sock=sock, backlog=BACKLOG, access_log=None)def create_reusable_socket(host='0.0.0.0', port=8080):    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)    sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)    sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)    sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)    sock.bind((host, port))    sock.setblocking(False)    sock.set_inheritable(True)    sock.listen(SOCKET_BACKLOG)    return sockif __name__ == '__main__':    sock = create_reusable_socket()    workers = []    for cpu_id in range(SERVERS_COUNT):        worker = multiprocessing.Process(target=start_server, args=(sock, cpu_id))        worker.daemon = True        worker.start()        workers.append(worker)    for worker in workers:        worker.join()
 |