from fastapi import FastAPI, WebSocket
import uvicorn, time, websocket, asyncio
from threading import Thread
from apscheduler.schedulers.asyncio import AsyncIOScheduler
from func_timeout import func_set_timeout
app = FastAPI()
class Tset:
def __init__(self, w: WebSocket, aka: str):
self.w = w
self.aka = aka
self.sc = AsyncIOScheduler()
self.sc.start()
@func_set_timeout(5)
def cc(self, w):
for s in range(10):
print(w, s)
time.sleep(1)
self.send("cc", w)
def send(self, act, data):
asyncio.run(self.w.send_text(data))
def cell(self, w):
self.sc.add_job(self.cc, args=(w,), id=self.aka)
@app.websocket("/ws/{aka}")
async def ws(w: WebSocket, aka: str):
func = Tset(w, aka)
await w.accept()
while True:
try:
p = await w.receive_text()
func.cell(p)
except:
func.sc.shutdown()
break
host = "192.168.31.123"
port = 8082
def f0():
uvicorn.run(app, host=host, port=port)
Thread(target=f0).start()
time.sleep(1)
class W():
def __init__(self):
self.e = websocket.WebSocketApp(f"ws://{host}:{port}/ws/dwa")
self.e.on_open = self.op
self.e.on_message = self.om
self.e.on_close = self.oc
self.e.run_forever()
def op(self):
print("p")
self.e.send("c1")
# time.sleep(2)
# self.e.send("c2")
def om(self, m):
print(m, "m")
def oc(self):
print("c")
W()
fastapi websockt 异步任务
于 2022-08-29 00:18:44 首次发布