有人告诉我,因为GIL,在Python中使用线程并不是一个好习惯。我认为创建线程的开销只会减慢速度并最终使其比单线程应用程序慢。 那么,为什么Python首先会有线程库呢?什么时候应该使用线程?
(我假设是Python3)
答案 0 :(得分:1)
@kindall在评论中给出了答案。
多线程不是加速任何处理的神奇工具。这是一种在系统中同时存在多个线程的方法。 可以用于在多个核心上拆分处理以进行计算绑定处理(由于Global Interpreter Lock,这个不在CPython中)。但它也可以用于io-bound处理:一个线程运行,而其他线程等待完成。一个很好的例子是多线程TCP服务器,其中每个线程可以为不同的客户端连接提供服务。 CPython实现在这里很好,因为GIL没有理由阻止已经在io级别阻塞的线程。
只是结束一般的多线程:它应该永远用于内存绑定处理......
答案 1 :(得分:0)
GIL
不是python本身的问题,它是cpython
实现的问题,因为cpython实现中的内存管理不是线程安全的。
Cpython
。因此,可以在特定时间在特定解释器上运行一个特定的python CPU绑定操作。所以,无论你是在运行单个/多个线程,它都是一样的。
但是,想象一下,如果存在一些I / O绑定任务,比如数据库查询或文件操作,其中python代码实际上并未执行,那么multithreading
可以使您受益匪浅。