python 多核 多进程 多线程

2014-12-27 13:47:39 +08:00
 ShiehShieh
有几个问题我一直不大明白,我说说我的想法,希望大家能指点一下这些认识对不对。

Python可以利用多核。
Python的多线程不能利用多核,因为GIL会限制一次只有一个线程。
Python利用多核的方法之一是根据核心数开相应数量的进程。

暂时只想到这么多。
另外希望大家说说python利用多核多线程的一些典型的途径,如果能给个项目参考参考就最好了,或者就是给一个guideline.
6789 次点击
所在节点    Python
12 条回复
ryd994
2014-12-27 13:54:33 +08:00
看你是什么程序了,如果是计算密集那确实Gil限制单线程,不过如果是IO密集的话不成问题,还是可以当多线程用的
ShiehShieh
2014-12-27 13:55:51 +08:00
@ryd994 嗯,这个我知道的,python多线程适合IO密集型。
imn1
2014-12-27 13:56:02 +08:00
前两句对,最后一句不对

没什么好例子,等其他大神
只玩过多进程调用wget,三句:载入multiprocessing.pool.Pool,一个wget命理的list,然后map()搞定
imn1
2014-12-27 13:57:52 +08:00
切,命令打成命理了
bigtan
2014-12-27 14:02:37 +08:00
http://segmentfault.com/blog/caspar/1190000000414339

博主可以看看这个,这个很有意思,效果也不错。我在自己的一篇博文里面试过。

http://segmentfault.com/blog/bigtan/1190000000486961
yakczh
2014-12-27 15:19:09 +08:00
多线程有GIL
多进程数据共享和同步麻烦

只有等协程
skybr
2014-12-27 15:34:33 +08:00
Python的多线程能用到多核, 只要在库里释放GIL锁, 像IO、lxml、numpy之类的都能通过多线程调用多核.
ShiehShieh
2014-12-27 15:52:29 +08:00
@skybr 原来如此,怪不得我跑numpy的时候cpu占用会超过100% T-T,但那还是需要人为去释放GIL是吧?默认多线程是无法发挥多核的是吗?
ShiehShieh
2014-12-27 15:54:18 +08:00
@bigtan 文章看完了,收获颇丰。谢谢。
ShiehShieh
2014-12-27 19:27:21 +08:00
@bigtan 我看了看你的文章,我觉得是因为本身html分析这一部分计算量并不大,主要是IO。
线程池和进程池都解决了IO阻塞的问题,但是由于本身就不是cpu密集型的任务,所以进程池方法并没有明显的优势。运行时间都在网络下载这些地方了。
ChanneW
2014-12-27 19:48:16 +08:00
如果用 Go 重写 Python 的解释器, GIL 问题会不会有改善?
Shared
2014-12-27 19:51:50 +08:00
@ChanneW 有很多库依赖 GIL,所以嘛会有更大的问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/157113

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX