-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathmain.py
More file actions
63 lines (51 loc) · 1.8 KB
/
main.py
File metadata and controls
63 lines (51 loc) · 1.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import os
import sys
import anyio
import uvicorn
from anyio.to_thread import current_default_thread_limiter
from app.core.config import settings
async def monitor_thread_limiter():
limiter = current_default_thread_limiter()
threads_in_use = limiter.borrowed_tokens
while True:
if threads_in_use != limiter.borrowed_tokens:
print(f"Threads in use: {limiter.borrowed_tokens}")
threads_in_use = limiter.borrowed_tokens
await anyio.sleep(0)
def main():
is_linux = sys.platform.startswith("linux")
if settings.debug:
os.environ["PYTHONASYNCIODEBUG"] = "1"
config = uvicorn.Config(
app="app.main:app",
host=settings.backend_host,
port=settings.backend_port,
reload=settings.reload_uvicorn,
workers=settings.workers_count,
loop="uvloop",
)
server = uvicorn.Server(config)
async def main_monitor():
async with anyio.create_task_group() as tg:
tg.start_soon(monitor_thread_limiter)
await server.serve()
anyio.run(main_monitor)
else:
if is_linux:
from app.web import GunicornApplication
options = {
"bind": f"{settings.backend_host}:{settings.backend_port}",
"workers": settings.workers_count,
"worker_class": "uvicorn.workers.UvicornWorker",
}
GunicornApplication("app.main:app", options).run()
else:
uvicorn.run(
app="app.main:app",
host=settings.backend_host,
port=settings.backend_port,
reload=settings.reload_uvicorn,
workers=settings.workers_count,
)
if __name__ == "__main__":
main()