返回信息流python的解释器,在任意时刻都只有一个线程运行。
是不是可以理解为,只有在程序没有使用python解释器时(比如调用内建C代码的时候),使用多线程才会提高程序的效率?
跪求明白人指导T T。。。
这是一条镜像帖。来源:北邮人论坛 / python / #4433同步于 2014/11/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖
【求教】有关python多线程的问题
HaSep
2014/11/26镜像同步10 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
就是Python每个线程开始执行的时候会去获取那把全局锁。直到时间片用完,或者开始进行IO的时候,才会释放。所以任何时间只能有一个Python线程在运行。
当然,以上叙述只适用于官方的CPython。PyPy已经可以用STM来去除这个锁了。做得相当不错,虽然比PyPy的带全局锁的版本略慢,但比CPython绝对快。
楼主想要做什么呢?要不要说说,我们一起来想想用什么语言(或者什么实现)来做比较好?
先拜暖神。。。
想要做的事情很简单,有一些属于不同类别的文本,对这些文本分词后,想要统计每一个词在每一类中出现的频率。数量比较大,所以用python的threading模块写了多线程,感觉上快了一些,不知道有什么更好的办法,我能想到的是多开几台电脑,多开几个terminal,一个terminal跑一个分类,不知道会不会快一点
暖神不说,都不知道还有pypy这样的好东西。
【 在 nuanyangyang 的大作中提到: 】
: 就是Python每个线程开始执行的时候会去获取那把全局锁。直到时间片用完,或者开始进行IO的时候,才会释放。所以任何时间只能有一个Python线程在运行。
: 当然,以上叙述只适用于官方的CPython。PyPy已经可以用STM来去除这个锁了。做得相当不错,虽然比PyPy的带全局锁的版本略慢,但比CPython绝对快。
: 楼主想要做什么呢?要不要说说,我们一起来想想用什么语言(或者什么实现)来做比较好?
【 在 HaSep 的大作中提到: 】
: 先拜暖神。。。
: 想要做的事情很简单,有一些属于不同类别的文本,对这些文本分词后,想要统计每一个词在每一类中出现的频率。数量比较大,所以用python的threading模块写了多线程,感觉上快了一些,不知道有什么更好的办法,我能想到的是多开几台电脑,多开几个terminal,一个terminal跑一个分类,不知道会不会快一点
: 暖神不说,都不知道还有pypy这样的好东西。
这样啊,不如数据划分一下,跑多个进程,把各自的结果存在几个文件里。
如果用fork的话,是不是也会遇到python解释器被占用的情况,还是说fork后使用的是不同的解释器?
如果是linux下多开几个terminal跑的话,用的是一个解释器么。。。
【 在 nuanyangyang 的大作中提到: 】
:
: 这样啊,不如数据划分一下,跑多个进程,把各自的结果存在几个文件里。
【 在 HaSep 的大作中提到: 】
: 如果用fork的话,是不是也会遇到python解释器被占用的情况,还是说fork后使用的是不同的解释器?
: 如果是linux下多开几个terminal跑的话,用的是一个解释器么。。。
:
fork出来就是两个进程,各自跑各自的。
其实我的意思就是类似你说的多开几个terminal跑。你也可以学学bash或者别的shell的用法,比如这个&符号的用法,开启一个进程,但不等待它执行完(在背景中跑)。
$ python myscript.py part1.txt &
$ python myscript.py part2.txt &
$ python myscript.py part3.txt &
$ python myscript.py part4.txt &
或者
$ for x in {1..4}; do
python myscript.py part${x}.txt &
done
嗯,回头好好研究下,多谢暖神!
以后有什么不懂的还望暖神不吝赐教
【 在 nuanyangyang (暖羊羊) 的大作中提到: 】
: fork出来就是两个进程,各自跑各自的。
: 其实我的意思就是类似你说的多开几个terminal跑。你也可以学学bash或者别的shell的用法,比如这个&符号的用法,开启一个进程,但不等待它执行完(在背景中跑)。
: [code=bash]
: ...................
通过『我邮2.0』发布
直接用multiprocess 多进程跳过全局锁
【 在 HaSep 的大作中提到: 】
: 先拜暖神。。。
: 想要做的事情很简单,有一些属于不同类别的文本,对这些文本分词后,想要统计每一个词在每一类中出现的频率。数量比较大,所以用python的threading模块写了多线程,感觉上快了一些,不知道有什么更好的办法,我能想到的是多开几台电脑,多开几个terminal,一个terminal跑一个分类,不知道会不会快一点
: 暖神不说,都不知道还有pypy这样的好东西。