我当时在做Flask微服务,我需要用FastAPI重写它,但是我有一个用Flask没有的问题。
问题是我发送的请求不会无限期地到达服务器。为了解除请求,例如使用Postman或Hoppscotch,我取消了请求,然后重新发送相同的请求,它工作得很好。我也尝试了curl,但我不能重现这个问题,请求在第一时间起作用。
我正在使用uvicorn,并且我尝试使用其他ASGI服务器,并且我使用Hypercorn重现了这个问题。然而,我尝试用Daphne重现了它,并且它工作了。
我没有错误消息,因为请求被卡住了,服务器永远不会捕捉到它。
我不能提供一个最小的可重现的例子,因为我不能创建一个。事实上,我初始化了一些FastAPI项目,没有一个项目有这个问题。我有这个bug的项目有很多后台代码,并使用多进程和线程,也许这就是问题的原因?
我尝试了很多方法来理解是什么导致了这个问题。你有什么想法可以产生我上面描述的东西吗?
发布于 2021-03-16 05:09:15
Asyncio主要被认为是一个单线程程序,它可以在空闲时刻切换任务,例如等待I/O。
在medium上有一篇很好的文章,解释了asyncio和multithreading之间的区别,以及如何在前者上实现后者。
https://medium.com/analytics-vidhya/asyncio-threading-and-multiprocessing-in-python-4f5ff6ca75e8
也就是说,由于没有源代码,很难说问题出在哪里。如果所有其他项目都可以工作,而您的项目不能工作,那么这要么是您的配置/设置,要么是您添加的代码的一部分。
PS有时我在windows上遇到了类似的问题,而在linux上却从未遇到过。它发生在启动时出现错误,这并不依赖于我的代码。虽然在新版本的anymore...maybe中我没有遇到这个问题,但它得到了修复。这可能是问题的根本原因,但我无法在没有代码的情况下判断。
https://stackoverflow.com/questions/66642038
复制相似问题