关于 Python 多线程效率问题

2015-02-26 14:16:49 +08:00
 MrGba2z
我这里想问的是 如果我单线程处理单个需要大概20分钟的话

现在处理100个.

是开100个线程好吗?还是开20个 每个线程处理5个. 有区别吗?

当然我知道Python的多线程是伪 但我暂时没时间去用别的语言写之类的.

就我的问题而讨论好了.

当然有比较方便优化Python脚本性能的办法, 也请不吝赐教.

Thanks in advance.
5114 次点击
所在节点    Python
18 条回复
way2exluren
2015-02-26 14:31:03 +08:00
如果时间消耗在cpu上,那么python的多线程是不能提高效率的……如果是io,应该能提高点效率。
leozy2014
2015-02-26 14:34:31 +08:00
不懂程序,lz可以测试下就知道选哪个好了
MrGba2z
2015-02-26 14:35:13 +08:00
@way2exluren

Sad....就是消耗在cpu上,
意思是单线程和二十线程没啥区别么....
mhycy
2015-02-26 14:38:30 +08:00
@MrGba2z
建议多进程解决,如果瓶颈是CPU,那么单一的Python进程最多只能充分利用单一核心的处理能力。
所以100线程和20线程区别不大

建议把消耗CPU的业务分离出来使用多进程解决
那么进程数等于CPU核心数就好了
MrGba2z
2015-02-26 14:48:25 +08:00
@mhycy

请问是和线程数相同还是核心数相同?

比如15MBP r 是四核八线程的吧,

我应该开8线程处理 对吗?
virusdefender
2015-02-26 14:48:39 +08:00
楼上说的对 要考虑是io密集型还是cpu密集型
mhycy
2015-02-26 14:50:45 +08:00
@MrGba2z
开8进程(注意是进程,不是线程)
neutrino
2015-02-26 14:52:15 +08:00
@MrGba2z 不,开4线程就可以了,最多跑的时候看一下CPU线程分配。
way2exluren
2015-02-26 14:52:23 +08:00
具体开多少个进程,要实测一下比较好。
cpu有多少“线程”,就开几个进程。
MrGba2z
2015-02-26 14:52:47 +08:00
@mhycy

明白了 谢谢!
ericyue
2015-02-26 14:57:58 +08:00
python没有严格意义的线程吧 还不如多进程快
hahastudio
2015-02-26 15:13:25 +08:00
multiprocessing.Pool(processes=multiprocessing.cpu_count())
nomaka
2015-02-26 15:14:46 +08:00
@MrGba2z 8进程 然后里面再开个线程池 这样效率会好一点
xdeng
2015-02-26 15:16:00 +08:00
其实你可以 看cpu 使用率
zerh925
2015-02-26 15:26:56 +08:00
cpu密集型:multiprocessing
io密集型:multithreading
mathgl
2015-02-26 19:00:57 +08:00
如果你的代码只是单纯的计算,可以用lupa。在python调用luajit。这样可以用线程,绕过gil。
min
2015-02-26 20:43:16 +08:00
跑两遍就知道的事情,试验出来自己回答吧
ming2281
2015-04-01 13:39:56 +08:00
我一般倾向于使用多进程,进程数==CPU核心数,再管理好进程间通信

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

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

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

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

© 2021 V2EX