1
ryd994 2014-12-27 13:54:33 +08:00 via Android
看你是什么程序了,如果是计算密集那确实Gil限制单线程,不过如果是IO密集的话不成问题,还是可以当多线程用的
|
2
ShiehShieh OP @ryd994 嗯,这个我知道的,python多线程适合IO密集型。
|
3
imn1 2014-12-27 13:56:02 +08:00
前两句对,最后一句不对
没什么好例子,等其他大神 只玩过多进程调用wget,三句:载入multiprocessing.pool.Pool,一个wget命理的list,然后map()搞定 |
4
imn1 2014-12-27 13:57:52 +08:00
切,命令打成命理了
|
5
bigtan 2014-12-27 14:02:37 +08:00 3
http://segmentfault.com/blog/caspar/1190000000414339
博主可以看看这个,这个很有意思,效果也不错。我在自己的一篇博文里面试过。 http://segmentfault.com/blog/bigtan/1190000000486961 |
6
yakczh 2014-12-27 15:19:09 +08:00
多线程有GIL
多进程数据共享和同步麻烦 只有等协程 |
7
skybr 2014-12-27 15:34:33 +08:00
Python的多线程能用到多核, 只要在库里释放GIL锁, 像IO、lxml、numpy之类的都能通过多线程调用多核.
|
8
ShiehShieh OP @skybr 原来如此,怪不得我跑numpy的时候cpu占用会超过100% T-T,但那还是需要人为去释放GIL是吧?默认多线程是无法发挥多核的是吗?
|
9
ShiehShieh OP @bigtan 文章看完了,收获颇丰。谢谢。
|
10
ShiehShieh OP @bigtan 我看了看你的文章,我觉得是因为本身html分析这一部分计算量并不大,主要是IO。
线程池和进程池都解决了IO阻塞的问题,但是由于本身就不是cpu密集型的任务,所以进程池方法并没有明显的优势。运行时间都在网络下载这些地方了。 |
11
ChanneW 2014-12-27 19:48:16 +08:00 1
如果用 Go 重写 Python 的解释器, GIL 问题会不会有改善?
|