1. 多进程与多线程的区别
进程与线程的区别在于二者的耗费CPU与耗费内存的资源不同,对于耗费CPU的比较多的操作使用多进程编程.对于IO操作比较密集的情况要使用多线程编程.因为进程切换的代价要高于线程.
*注意: 在windows中使用多进程变编程的时候, 代码一定要写在if name=='main'中
2. 多进程编程
(1) 进程类: 进程使用multiprocessing包中的Process,他的使用方法与Thread基本相同
(2)进程池: 进程池使用multiprocessing包中的Pool类, 它的第一个参数表示进程池中的线程数量,如果不指定参数会默认为CPU核数大小的进程数, 也可以通过multiprocessing.cpu_count()获取CPU的核心数
代码示例
import time
import multiprocessing
def test(seconds):
time.sleep(seconds)
print('sleep {} 秒'.format(seconds))
return seconds
if __name__ == '__main__':
pool = multiprocessing.Pool(multiprocessing.cpu_count())
# 使用apply_async方法往进程池中添加进程
result = pool.apply_async(func=test, args=(1,))
# 必须先将进程池close掉才能join
pool.close()
# 等待进程池中的进程运行完成
pool.join()
# 使用get方法获取运行结果
print(result.get())
# imap方法类似于map方法,会将列表中的每个元素作为函数的参数加入到池中运行,并且返回结果顺序与列表中元素顺序相同
for res in pool.imap(test, [1, 3, 5]):
print(res)
# imap_unordered方法与imap方法基本相同,但返回结果的顺序为先执行完先返回
for res in pool.imap_unordered(test, [1, 3, 5]):
print(res)
网友评论