Python 在flask web app中使用线程

Python 在flask web app中使用线程,python,multithreading,flask,thread-safety,Python,Multithreading,Flask,Thread Safety,我正在开发一个web应用程序,它有一个可能需要很长时间才能完成的服务/任务。我是python新手,了解到python有GIL,这意味着无论内核数量多少,一次只能运行一个线程 我的伪代码是这样的 def service_xxx(self, data): thread = ThreadXXX(data) thread.start() self.threads[data.id] = thread 我的问题是当100个请求到来时会发生什么?flask框架将使用所有内核并发运行1

我正在开发一个web应用程序,它有一个可能需要很长时间才能完成的服务/任务。我是python新手,了解到python有GIL,这意味着无论内核数量多少,一次只能运行一个线程

我的伪代码是这样的

def service_xxx(self, data):
    thread = ThreadXXX(data)
    thread.start()
    self.threads[data.id] = thread
我的问题是当100个请求到来时会发生什么?flask框架将使用所有内核并发运行100个用户线程,还是将在单个内核上运行100个线程

Python(CPython)没有针对线程框架进行优化。您可以继续分配更多资源,它将尝试生成/排队新线程并重载核心。您需要在此处进行设计更改:

基于过程的设计:

  • 或者使用模块
  • 使用并使此任务单独运行
  • 产卵
  • 或者,如果您仍然希望坚持线程:

  • 切换到(比CPython更快)
  • 切换到(完全取消GIL)

  • 你没有100个核,是吗?现在说真的。GIL是我个人在需要并发时不依赖线程的原因。我更喜欢多重处理。有关更多信息,请参阅。您可以与FlaskI集成,我正在尝试了解FlaskI是如何处理这些线程的,以及每个线程中的请求是如何处理的?