Python 多线程问题

2015-07-07 20:20:58 +08:00
 latteczy
https://gist.github.com/smartczy/35e692064b775dcc3e17

上面的代码分别用多线程和普通方式抓取页面信息。但是二者运行时间相差无几,大约都是0.7+秒。这里应该不是CPU密集型,所以多线程应该有效率的提高才对。不知是何原因?
最近在学习Python的多线程,请大神多多指教!
4294 次点击
所在节点    Python
28 条回复
Shazoo
2015-07-08 10:08:30 +08:00
@latteczy

如果需要统计时间,我觉得你可以在线程内部实现的。退出前打印下即可。如果要保证和之前类似的输出,就需要考虑在主线程内阻塞等待了。
latteczy
2015-07-08 14:41:34 +08:00
@Shazoo 也就是说,保证按之前的请求顺序输出和提高效率二者始终是矛盾的,这么理解对吧?
yuyang
2015-07-08 14:54:33 +08:00
@aec4d 网上一票SB只要看到别人用python写多线程程序,立马就喷,立马搬出GIL,立马要你改成多进程,以前我还会吐槽下这些不懂装懂的家伙,现在直接无视..
sampeng
2015-07-08 16:43:55 +08:00
不是所有的多线程一定带来效益的提升。。。。。尤其是里面有网络请求这样的东西的时候。
线程同步会坑很大一堆时间,完全和多线程带来的收益抵消甚至更严重的问题。

个人看法,多线程只用在相互之间毫无关系,一丁点关系都没有。不需要同步状态。没有顺序关联的时候是最有效的。其他时候,纯粹是自己给自己找麻烦(线程同步很蛋疼的)
ryd994
2015-07-08 17:56:00 +08:00
@sampeng 这种情况还好吧……加锁就可以了
latteczy
2015-07-10 08:35:11 +08:00
@Shazoo
这个地方不加join和加
for t in threads:
t.join()
效果应该是一样的吧
qqblog
2015-07-11 14:26:33 +08:00
计划今后生产、开发环境换成pypy,版本未定
Shazoo
2015-07-13 08:30:29 +08:00
@latteczy 也不矛盾了。你如果需要得到类似顺序执行的结果,就需要线程之间同步。同步方法有很多,这个情况下,比较简单的就是每个线程都记录下自己的执行时间,然后所有线程结束后,比较下,输出最长即可。

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

https://tanronggui.xyz/t/204035

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

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

© 2021 V2EX