uWSGI mules VS 本机 Python 线程

uWSGI mules VS native Python threads

我已经阅读了 uWSGI mule 的文档,以及来自其他来源的一些信息。但是我对 mule 和 python 线程之间的区别感到困惑。任何人都可以向我解释一下,mule 可以做什么而线程不能,为什么 mule 甚至存在?

uWSGI mule 可以被认为是一个独立的工作进程,它不能通过套接字访问(例如直接网络请求)。它执行您的应用程序的一个实例,可用于使用 mulefunc Python decorator for example. Also, as mentioned in the documentation 卸载任务,mule 可配置为执行自定义逻辑。

另一方面,一个线程运行在其父进程(uWSGI worker)的地址space。因此,如果工作人员死亡或重新加载,线程的行为方式相同。它可以处理请求,也可以通过thread装饰器执行指定的任务(函数)。

Python 线程不跨越多个 CPUs,粗略地说不能使用所有 CPU 的能力,这是一个 Python GIL 限制 What is the global interpreter lock (GIL) in CPython?

这是使用 Web 服务器的原因之一,它们的职责是为每个接收到的任务(http 请求)派生一个流程工作者或使用空闲一个。

A mule function on the same principal,但在某种意义上是特殊的,它旨在运行http请求上下文之外的任务。背后的想法是,您可以保留一些 mule,每个 mule 都将 运行ning 在一个单独的进程中(跨越多个 CPUs),就像普通工作人员所做的那样,但它们不提供任何 http 请求, 只设置 uwsgi 文档中提到的任务。

值得一提的是,mule 也由 Web 服务器的主进程监控,因此它们会在被杀死或死亡时重生。