前提・実現したいこと
高負荷に耐えられるAPIを作成したい
発生している問題・エラーメッセージ
Process SpawnProcess-1: Traceback (most recent call last): File "C:\Users\ikki1\AppData\Local\Programs\Python\Python39\lib\multiprocessing\process.py", line 315, in _bootstrap self.run() File "C:\Users\ikki1\AppData\Local\Programs\Python\Python39\lib\multiprocessing\process.py", line 108, in run self._target(*self._args, **self._kwargs) File "C:\Users\ikki1\AppData\Local\Programs\Python\Python39\lib\site-packages\uvicorn\subprocess.py", line 61, in subprocess_started target(sockets=sockets) File "C:\Users\ikki1\AppData\Local\Programs\Python\Python39\lib\site-packages\uvicorn\main.py", line 419, in run loop.run_until_complete(self.serve(sockets=sockets)) File "C:\Users\ikki1\AppData\Local\Programs\Python\Python39\lib\asyncio\base_events.py", line 629, in run_until_complete self.run_forever() File "C:\Users\ikki1\AppData\Local\Programs\Python\Python39\lib\asyncio\base_events.py", line 596, in run_forever self._run_once() File "C:\Users\ikki1\AppData\Local\Programs\Python\Python39\lib\asyncio\base_events.py", line 1854, in _run_once event_list = self._selector.select(timeout) File "C:\Users\ikki1\AppData\Local\Programs\Python\Python39\lib\selectors.py", line 324, in select r, w, _ = self._select(self._readers, self._writers, [], timeout) File "C:\Users\ikki1\AppData\Local\Programs\Python\Python39\lib\selectors.py", line 315, in _select r, w, x = select.select(r, w, w, timeout) ValueError: too many file descriptors in select()
該当のソースコード
Python3
1from fastapi import FastAPI, Depends 2import uvicorn 3 4app = FastAPI() 5 6@app.get("/user/{user_id}") 7def hello(user_id): 8 9 return r 10 11if __name__ == "__main__": 12 uvicorn.run("api:app", host="0.0.0.0", reload=True, port=80)
試したこと
reloadを消してみたりしましたがFastAPIなどでは正直耐えられない負荷は耐えられないというふうな結論が出そうだったのでどうにか高負荷に耐える方法があるかを教えてほしいです。
関数の処理内は消しています。ただ単純にthreading+requestsでストレステストを行ったら落ちてしまうため知ってる方が居たら助けていただけると助かります。