我正在运行一个解析大量数据的python方法。因为它是时间密集型的,我想在一个单独的线程上异步运行它,这样用户仍然可以访问网站/UI。
如果用户退出站点,使用"from threading import thread"模块的线程是否终止,或者它们是否继续在服务器上运行?
使用芹菜和简单地使用线程模块有什么优势?
由于(in)著名的全局解释器锁aka (GIL), Python解释器绝对是单线程的。因此,Python中的线程只有在计算和IO可以同时发生时才提供并行性。计算绑定任务在Python线程模型中几乎看不到线程的好处,至少在CPython 2或3下是这样。
另一方面,这些限制不适用于多处理,这是您将在像芹菜这样的排队系统中所做的。你可以运行多个Python工作实例,它们可以在多核机器上同时执行,或者在多台机器上执行。
如果我理解你的场景——一个网站上的交互启动了一个长时间运行的作业——排队几乎肯定是一种选择。您将获得真正的并行性,并且可以轻松地选择将处理转移到其他机器。