赞
踩
事实上,很多时候Python的多线程是无法提速的。
这是因为CPython解释器本身不是线程安全的,因此存在全局解释器锁(GIL, global interpreter lock),1次只允许1个线程执行Python代码,因此,1个Python进程通常不能使用多个CPU核心。
与Python语言本身无关,Jython等没有这个限制。
ThreadPoolExecutor()函数需要1个参数指定线程池中线程的数量,而ProcessPoolExecutor()函数通常不需要指定进程数,默认是os.cpu_count()函数返回的CPU数量,也可以自行指定其他值,但对CPU密集型的处理而言,进程数不得超过CPU数量。
说了这么多,亲测有效的还是多进程加速
import multiprocessing
pool = multiprocessing.Pool(processes=4)
return_value = pool.apply_async(func_name, (参数列表,))
p.close()
p.join()
from multiprocessing import Pool
p = Pool()
result = p.apply_async(foo, args=(a, ))
# foo和a分别是你的方法和参数,这行可以写多个,执行多个进程,返回不同结果
p.close()
p.join()
新建一个进程池,并指定本机cpu核心数量为4(看你的机子cpu有多少核)
这样主程序运行时就会建立出4个额外的进程,每个进程可以运行在不同核心上,从而实现了多核并行.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。