用于运行异步请求的 Python Celery 与线程库 [关闭]
Posted
技术标签:
【中文标题】用于运行异步请求的 Python Celery 与线程库 [关闭]【英文标题】:Python Celery versus Threading Library for running async requests [closed] 【发布时间】:2014-07-10 21:37:57 【问题描述】:我正在运行一个解析大量数据的 python 方法。由于它很耗时,我想在单独的线程上异步运行它,以便用户仍然可以访问网站/UI。
如果用户退出站点,使用“从线程导入线程”模块的线程会终止还是继续在服务器上运行?
使用 Celery 与简单地使用 threading 模块相比有什么优势?
【问题讨论】:
嗯,事实证明这个问题不是仅根据意见生成答案。相反,它会根据事实和参考生成答案。让一些人关注社区中正在发生的事情很好,但你们会根据需要更新您的行动! 【参考方案1】:由于著名的global interpreter lock aka (GIL),Python 解释器绝对是单线程的。因此,Python 中的线程仅在计算和 IO 可以同时发生时才提供并行性。在 Python 线程模型中,至少在 CPython 2 或 3 下,计算绑定任务几乎不会从线程中受益。
另一方面,这些限制不适用于多处理,这是您将使用 celery 等排队系统所做的事情。您可以运行多个 Python 工作实例,这些实例可以在多核机器或多台机器上同时执行。
如果我理解您的情况 - 网站上的交互启动了一项长期运行的工作 - 排队几乎肯定是要走的路。您可以获得真正的并行性以及将处理转移到其他机器的简单选项。
【讨论】:
您能告诉我compute bound threads
是什么意思吗?您的意思是说,执行计算或需要通过线程进行 I/O 的代码不会增加价值?
@Venkat,“计算限制”是指一个进程,其限制因素是在 CPU 中执行操作,而不是 I/O 限制,限制因素是读写磁盘或网络,同时CPU 有空闲周期。见***.com/questions/868568/…。
如果只是为了不阻塞必须响应客户端的线程,那么使用线程模块是否合理??
threading
模块的@cbare python 线程是“真正的”操作系统线程,但由于 GIL,它们不会同时运行
已编辑,谢谢@piec以上是关于用于运行异步请求的 Python Celery 与线程库 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
python测试开发django-159.Celery 异步与 RabbitMQ 环境搭建