12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- import os
- import socket
- import multiprocessing
- from aiohttp import web
- from .main import create_app
- import uvloop
- SERVERS_COUNT = multiprocessing.cpu_count()
- BACKLOG = 2048
- SOCKET_BACKLOG = BACKLOG * SERVERS_COUNT
- def start_server(sock, cpu_id):
- if hasattr(os, "sched_setaffinity"):
- os.sched_setaffinity(0, {cpu_id})
- 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 sock
- if __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()
|