This commit is contained in:
DingZQ
2023-10-21 08:54:35 +08:00
parent adc432b6c1
commit 782ec758ee

14
main.py
View File

@@ -146,22 +146,18 @@ async def fastapi_dump_inp(network: str, inp: str) -> bool:
dump_inp(network, inp)
return True
app.state.lock = asyncio.Lock() # Create an async lock object
app.state.is_simulation = False
# 必须用这个PlainTextResponse不然每个key都有引号
@app.get("/runproject/", response_class = PlainTextResponse)
def fastapi_run_project(network: str) -> str:
if app.state.lock.locked():
raise HTTPException(status_code=400, detail="is in simulation")
if app.state.is_simulation:
raise HTTPException(status_code=409, detail="is in simulation")
else:
try:
app.state.lock.acquire() # Acquire the lock
app.state.is_simulation = True
result = run_project(network)
app.state.is_simulation = False
return result
except asyncio.CancelledError:
raise HTTPException(status_code=400, detail="is in simulation")
finally:
app.state.lock.release()
# put in inp folder, name without extension
@app.get("/runinp/")