import queue
import threading
import time
import uvicorn
import schedule
from fastapi import FastAPI
task_queue = queue.Queue()
app = FastAPI()
@app.get("/")
def read_root():
task_queue.put(1)
return {"Hello": "World"}
def handle_task(task_id: str):
pass
def job():
if task_queue.qsize() > 0:
task_id = task_queue.get()
handle_task(task_id)
def handle_tasks():
schedule.every(1).minute.do(job)
while True:
schedule.run_pending()
time.sleep(1)
if __name__ == "__main__":
task = threading.Thread(target=handle_tasks, args=())
task.start()
uvicorn.run("main:app", host="0.0.0.0", port=8000)
用的是 fastapi,然后我想用一个队列存任务序号,然后再用一个定时任务相当于轮询队列有没有任务,但是现在出错了,我发现两个线程里的队列对象不是同一个
应该怎么写才对
好像不是多线程的问题,是fastapi uvicron的问题,好像变成多进程了
1
youngce 2021-06-16 21:07:00 +08:00
python 协程调用线程( https://docs.python.org/zh-cn/dev/library/asyncio-task.html#running-in-threads )
其次,你这个异步直接用协程异步算了,除非你的异步逻辑完全不支持协程的写法 最后,那些用 fastapi,还是先把协程理解清楚了再上车吧 |