请教一个 Python 多线程的问题

2021-06-16 19:43:33 +08:00
 zxCoder
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,然后我想用一个队列存任务序号,然后再用一个定时任务相当于轮询队列有没有任务,但是现在出错了,我发现两个线程里的队列对象不是同一个

应该怎么写才对

628 次点击
所在节点    问与答
2 条回复
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,还是先把协程理解清楚了再上车吧
zxCoder
2021-06-16 21:15:33 +08:00
@youngce 还需要学这些吗 我是看 fastapi 写一个接口和绑定参数很快

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/783804

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX