python多进程pool模块下map方法的使用

python多进程中如果需要执行的多进程任务参数是一个可迭代对象的时候可以使用pool类下的map函数来简化操作

函数原型:map(func, iterable[, chunksize=None])

Pool类中的map方法,与内置的map函数用法行为基本一致,它会使进程阻塞直到结果返回。 
注意:虽然第二个参数是一个迭代器,但在实际使用中,必须在整个队列都就绪后,程序才会运行子进程

原来的多进程方法来处理任务,测试代码如下:

#!/usr/bin/python3
#coding:utf-8
from multiprocessing import Pool,Manager
import time
def test(q):
    while q.qsize() > 0:
    name = q.get()
print(name)
    if __name__ == "__main__":
    start_time = time.time()
    names = ["suyang", "yang.su", "shevechco", "merci", "nickname", "aliasname"]
    q = Manager().Queue()
    for name in names:
        q.put(name)
    p = Pool(4)
    for i in range(4):
        p.apply_async(test, args=(q, ))
    p.close()
    p.join()
    end_time = time.time()
    print("cost time : {:.2f}".format(end_time - start_time))

打印结果如下:

{9DE575A0-3468-474B-910F-BD0B100CD18F}_20190425143109.jpg

如果参数为迭代对象是可以使用map函数来处理,主要测试代码如下:

#!/usr/bin/python3
#coding:utf-8
from multiprocessing import Pool,Manager
import time
def test(name):
    print(name)

if __name__ == "__main__":
    start_time = time.time()
    names = ["suyang", "yang.su", "shevechco", "merci", "nickname", "aliasname"]
    p = Pool(4)
    p.map(test, names)
    p.close()
    p.join()
    end_time = time.time()
    print("cost time : {:.2f}".format(end_time - start_time))

2222.jpg

通过实例我们看可以很清楚的看到如果多进程处理的任务参数如果是一个可迭代对象,那么使用map方法能够提高不少效率

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://sulao.cn/post/651.html