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

时间:2014-05-22 02:22:58

标签: python celery django-celery python-multithreading

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

如果用户退出站点或继续在服务器上运行,使用“from threading import thread”模块的线程会终止吗?

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

1 个答案:

答案 0 :(得分:12)

Python线程不是真正的本机操作系统线程。请参阅Green-threads and thread in python

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

另一方面,这些限制并不适用于多处理,这是您在像芹菜这样的排队系统中所做的事情。您可以运行多个Python工作实例,这些实例可以在多核计算机上同时执行,也可以在多台计算机上执行。

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