![]() | 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 ![]() 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 ![]() 如果用 Go 重写 Python 的解释器, GIL 问题会不会有改善? |