用于运行异步请求的Python Celery与线程库

Python Celery versus Threading Library for running async requests

我正在运行一个解析大量数据的python方法。 由于它是时间密集的,我想在一个单独的线程上异步运行它,以便用户仍然可以访问网站/ UI。

如果用户退出站点或继续在服务器上运行,是否使用"来自线程导入线程"模块的线程终止?

使用Celery与仅仅使用线程模块这样的优势有什么好处?


Python线程不是真正的本机操作系统线程。 请参阅python中的绿色线程和线程。

并且,由于(in)着名的全局解释器锁定(GIL),Python解释器是坚定的单线程。 因此,Python中的线程仅在计算和IO可以同时发生时提供并行性。 计算绑定任务将看不到Python线程模型中的线程带来的好处,至少在CPython 2或3下是这样。

另一方面,这些限制不适用于多处理,这是您将使用像芹菜这样的排队系统。 您可以运行几个可以在多核计算机或多台计算机上同时执行的Python工作程序实例。

如果我理解你的场景 - 网站上的互动开始了一个长期的工作 - 排队几乎肯定是要走的路。 您可以获得真正的并行性以及将处理转移到其他计算机的简单选项。