|
from multiprocessing import Process, Manager
|
|
from socket import SOL_SOCKET, SO_REUSEADDR, socket
|
|
from aiohttp import web
|
|
import logging
|
|
|
|
logging.basicConfig(level=logging.DEBUG)
|
|
|
|
from main3 import init_app
|
|
import asyncio
|
|
|
|
def serve_multiple(app,workers):
|
|
sock = socket()
|
|
sock.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
|
|
sock.bind(('0.0.0.0', 8080))
|
|
sock.set_inheritable(True)
|
|
setattr(app,"shared",Manager().dict())
|
|
app.shared['counter'] = 0
|
|
processes = []
|
|
for i in range(workers):
|
|
process = Process(
|
|
target=web.run_app,
|
|
name=f'worker-{i}',
|
|
kwargs=dict(app=app, sock=sock)
|
|
)
|
|
process.daemon = True
|
|
process.start()
|
|
processes.append(process)
|
|
|
|
try:
|
|
for process in processes:
|
|
process.join()
|
|
except KeyboardInterrupt:
|
|
pass
|
|
finally:
|
|
for process in processes:
|
|
process.terminate()
|
|
sock.close()
|
|
|
|
app = asyncio.run(init_app())
|
|
serve_multiple(app, 3)
|