python多进程编程的一点积累
2018-01-09 00:00
274 查看
摘要: 因为GIL的关系,python运行都是单线程状态,多线程也不过是大家轮流运行罢了,这种运行方式是比较慢的,在进行一些大规模计算的时候,我们需要多进程编程来减少运行时间。
在python中进行多进程编程,我们通常使用multiprocessing这个python官方的多进程库,但是据说有很多其他更好的库可使用,有许多新的特性例如守护进程等,不过今天我只讲比较简单原始的multiprocessing。
话不多说,直接上代码:
首先确定你的程序是否适合多进程执行,如果适合,使用multiprocessing开启多个进程,将你的输入切分为多块,分块投入到各个进程中执行。
注意:切分块的大小要适当调整,如果太小,单个进程的计算强度不够,cpu在调度的时候,就不会打满,会出现多个进程争夺时间片的情况,调整适当能够充分利用cpu。
在python中进行多进程编程,我们通常使用multiprocessing这个python官方的多进程库,但是据说有很多其他更好的库可使用,有许多新的特性例如守护进程等,不过今天我只讲比较简单原始的multiprocessing。
话不多说,直接上代码:
def calcuvalue_main(arg1,arg2,arg3): '''计算函数''' valuelist = [] for word in arg1: #计算结果 pass return valuelist def pos_value_main(pos_words,neg_seedwords): '''多进程计算函数''' core_count = multiprocessing.cpu_count() pool = multiprocessing.Pool(core_count) result = [] res = {} pos_words_list = cutlist(pos_words) #将待算的输入列表切分为多个小列表 for index, pos_words in enumerate(pos_words_list): #将所有小列表分配到各个进程,返回的是一个个结果列表 res[index] = pool.apply_async(calcuvalue_main, (pos_words, pos_seedwords, neg_seedwords)) pool.close() pool.join() for i in res: #本条计算完毕 real_res = res[i].get() for k in real_res: result.append(k) return result
首先确定你的程序是否适合多进程执行,如果适合,使用multiprocessing开启多个进程,将你的输入切分为多块,分块投入到各个进程中执行。
注意:切分块的大小要适当调整,如果太小,单个进程的计算强度不够,cpu在调度的时候,就不会打满,会出现多个进程争夺时间片的情况,调整适当能够充分利用cpu。
相关文章推荐
- python并发编程之多进程1-----------互斥锁与进程间的通信
- Python多线程和多进程编程
- Python并发编程之进程
- Python并发编程之进程
- 探究Python多进程编程下线程之间变量的共享问题
- Python多进程编程-开篇
- Python网络编程之线程与进程
- Python基础(七)系统编程之进程-fork
- 使用Python进行多进程编程
- Python并发编程之进程
- python学习之路(针对没有任何编程经验者或懂一点shell者)
- Python并发编程之进程
- python使用multiprocessing进行多进程编程(1)
- Python - 多进程编程, 不怕GIL
- 我的嵌入式C编程一点积累
- 使用Python进行多进程编程
- 理解python并发编程-进程篇
- [Python] 多进程编程
- 使用Python进行多进程编程
- python多线程,多进程编程。