我正在运行一个解析大量数据的python方法。由于时间密集,我想在一个单独的线程上异步运行它,这样用户仍然可以访问网站/ UI。
如果用户退出站点或继续在服务器上运行,使用“from threading import thread”模块的线程会终止吗?
使用Celery与仅仅使用线程模块这样的优势有什么好处?
答案 0 :(得分:12)
Python线程不是真正的本机操作系统线程。请参阅Green-threads and thread in python。
而且,由于(in)着名的全局解释器锁定(GIL),Python解释器是坚定的单线程。因此,Python中的线程仅在计算和IO可以同时发生时提供并行性。计算绑定任务将看不到Python线程模型中的线程带来的好处,至少在CPython 2或3下是这样。
另一方面,这些限制并不适用于多处理,这是您在像芹菜这样的排队系统中所做的事情。您可以运行多个Python工作实例,这些实例可以在多核计算机上同时执行,也可以在多台计算机上执行。
如果我了解您的情况 - 网站上的互动开始了长期工作 - 排队几乎肯定是要走的路。您可以获得真正的并行性以及将处理转移到其他计算机的简单选项。