BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / python / #4433同步于 2014/11/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖

【求教】有关python多线程的问题

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