Python多线程,赞还是不赞?
我一直在尝试写一个简单的Python应用程序,想实现一个工作队列。每当我在网上查关于线程的资料时,总会看到一些人评论说,不应该使用Python的线程,因为这样那样的原因。有人能帮我解答一下吗?Python的线程到底怎么样?我可以用它吗?如果可以的话,应该用哪个库?标准库够用吗?
3 个回答
0
GIL 这个链接可以给你一些关于这个话题的信息。
0
- 你其实不需要使用线程。95%的代码不需要线程。
- 没错,Python的线程是完全可以用的,它是通过操作系统自带的线程来实现的。
- 可以使用标准库里的
threading
模块,它非常好用。
5
Python的线程在很多任务中是非常有效和有用的。因为它们是用操作系统的原生线程实现的,所以可以同时执行一些会阻塞的系统调用——也就是说,可以在一个单独的线程中调用这些会阻塞的操作。这对于需要同时做多件事情的程序(比如图形用户界面和其他事件循环)非常有帮助,甚至可以提升一些与输入输出相关的任务的性能,比如网页抓取。
不过,由于有一个叫做全局解释器锁(Global Interpreter Lock,简称GIL)的东西,它限制了Python解释器实际上不能同时运行多个线程。如果你想通过线程来分散计算密集型的代码到多个CPU核心上以提高性能,那就不太可能了。不过,你可以使用multiprocessing
模块来实现这个目标,它提供了类似于threading
的接口,但使用的是进程而不是线程来分配工作。
我还要补充一点,C语言扩展不一定受GIL的限制,很多C扩展会释放这个锁,所以C扩展可以通过线程来利用多个核心。
所以,这一切都取决于你到底需要做什么。