关于python多线程

2011-11-01 20:51:07 +08:00
 kojp
呃,有没有一个上限?或是什么的?

我写一个超级简单的自动投票程序,
用了一下多线程。。。从两个到五个到十个。。。越用越爽~~~

能不能用到100个?200个?
(好多基础我不懂,都是现用现GOOGLE的,所以如果问题有点不入道,请见谅)
5577 次点击
所在节点    Python
16 条回复
keakon
2011-11-01 20:57:35 +08:00
上限就是你的内存……

另外,因为存在GIL,所以Python的多线程只能用于避免IO的等待,无法利用多核CPU的优势
kojp
2011-11-02 08:44:53 +08:00
@keakon

谢谢。
kojp
2011-11-02 08:46:19 +08:00
@keakon
另:无法利用多核CPU的优势

那么有什么语言或者工具可以利用到多核CPU的优势吗? 因为,实际条件是,服务器的CPU是6核的。
Ricepig
2011-11-02 08:49:26 +08:00
@kojp 你同时跑n个你的程序不就行了。。。
myrual
2011-11-02 09:06:24 +08:00
@kojp 非要榨干多核的cpu的能力的话,可能要看看支持并行计算的语言,也许函数式的语言可以满足需求,如果线程必须依赖io来进行的话,可能提升的空间有限吧。
est
2011-11-02 09:11:03 +08:00
@kojp stackless python or multiprocessing
kojp
2011-11-02 10:11:59 +08:00
@Ricepig

试了。。。(弱弱的再问一句,这个有上限么?同时跑了十个)
kojp
2011-11-02 10:13:23 +08:00
@est
还有。stackless python 这么个东东。。? 谢谢。。
Ricepig
2011-11-02 14:43:54 +08:00
@kojp 看你的CPU负载,如果都满了,那就没必要多开了

上限在linux上貌似就是pid上限
alsotang
2011-11-03 22:32:51 +08:00
投票程序一般都是IO上限,所以没必要去利用多核的优势。你的程序的效率瓶颈在于网络速度,而不是CPU的处理速度。
我认为楼主的程序开10个程序每个10线程,与1个程序100线程的效率是几乎一致的。
kojp
2011-11-03 23:01:32 +08:00
@alsotang

呃,经测试。效率完全是有差别的。。。(也可能是我程序里面没处理好)

我在程序里面开5个线程,和开10个线程。。以及开20个线程。。。是承一定的规律往下递减的。
比如说 10个===》100票 20个====>180票。。。50个=====》350票(大概是这么个规律,数据不够准确)


但是,我要把10个线程的程序同时开上5个的话。。。却基本上是平均的。 5*100=500票
SkyFvcker
2011-11-12 17:08:44 +08:00
都是GIL惹得,高并发用Erlang,或者用多进程库。在*nix里多进程通信代价是很低的
dreamersdw
2011-11-12 18:09:46 +08:00
Linux 下
查看线程数限制 cat /proc/kernel/sys/threads-max,我这里是 62274
查看进程数限制 cat /proc/kernel/sys/pid-max。我这里是 32768

non-blocking socket 程序通常是简单的,但代价是不得不为每一个 socket 启用单独的线程或进程。如为效率着想可以使用 epoll + non-blocking socket http://scotdoyle.com/python-epoll-howto.html,并且 Python 下还有 Twisted 框架简化这类编程问题 http://twistedmatrix.com/trac/
kojp
2011-11-13 15:44:41 +08:00
@dreamersdw

谢谢,可是我竟然,cat 不出来。。那个值。。。
est
2011-11-13 17:57:43 +08:00
@dreamersdw twisted当真是用来“简化”的?
dreamersdw
2011-11-14 08:53:30 +08:00
@kojp OMG, 写反了,应当是 cat /proc/sys/kernel/threads-max

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

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

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

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

© 2021 V2EX