简单查看了一下 jieba.enable_parallel()
部分的源代码
def enable_parallel(processnum=None):
"""
Change the module's `cut` and `cut_for_search` functions to the
parallel version.
Note that this only works using dt, custom Tokenizer
instances are not supported.
"""
global pool, dt, cut, cut_for_search
from multiprocessing import cpu_count
if os.name == 'nt':
raise NotImplementedError(
"jieba: parallel mode only supports posix system")
else:
from multiprocessing import Pool
dt.check_initialized()
if processnum is None:
processnum = cpu_count()
pool = Pool(processnum)
cut = _pcut
cut_for_search = _pcut_for_search
其中只是改写了 cut
和 cut_for_search
,请问可不可以理解为即使调用了 enable_parallel()
,使用 lcut
类的函数还是单进程运行?
以及,Windows系统下Python同样支持 from multiprocessing import Pool
,请问为什么一定要限制在 os.name != 'nt'
下才能使用?
2条答案
按热度按时间qzwqbdag1#
自己回答吧
虽然不知道为什么原作者不在
Windows
下开启多进程模式,但是自己改写了一个粗略版。思想就是暴力多进程,而且有可能严重消耗内存,适合数据量大同时主机内存空间较大使用
这里要求data为可迭代对象,返回值为多维列表
camsedfj2#
自己回答吧
虽然不知道为什么原作者不在
Windows
下开启多进程模式,但是自己改写了一个粗略版。思想就是暴力多进程,而且有可能严重消耗内存,适合数据量大同时主机内存空间较大使用
这里要求data为可迭代对象,返回值为多维列表
我测试了下,修改了jieba并行分词的源码,如果在win下运行并行分词,会出现错误,而错误貌似是python-x86/x64下才会出现的问题