码迷,mamicode.com
首页 > 编程语言 > 详细

python 多进程处理 multiprocessing模块

时间:2016-04-17 18:04:55      阅读:375      评论:0      收藏:0      [点我收藏+]

标签:python 多进程 处理列表   通过函数获取返回值   

前提: 有时候一个用一个进程处理一个列表中的每个元素(每个元素要传递到一个函数中进行处理),这个时候就要用多进程处理



1 现场案例:


我有一个[ip1,ip2,ip3,.......]这样的列表,我要每个元素ip传递给一个get_ping_info(addr)函数得到返回延迟信息,然后将结果到一保存个result列表中,如果用一个单进程执行的话可能需要几分钟,但是如果多进程处理就可以缩减几倍的速度了


用法:(程序代码只截图了部分,不可运行)

pool.apply_async(函数名, (函数的参数1,函数的参数2,函数的参数3))


import multiprocessing
def get_ping_info(create_time,prov,city,net_type,addr):
    result = ping.quiet_ping(addr, timeout=2, count=5, psize=64)
    loss_rate = result[0]
    max_time = float(‘%.3f‘% result[1]) if isinstance(result[1], float) else 0
    #if max_time and average_time is None use 0
    average_time = float(‘%.3f‘% result[1]) if isinstance(result[2], float) else 0
    print create_time,prov,city,net_type,loss_rate, average_time
    return (create_time,prov,city,net_type,loss_rate, average_time)



if __name__ == "__main__":
    all_city_result_tmp = []
    all_city_result = []
    create_time = datetime.now()
    city_list = get_city_list()
    pool = multiprocessing.Pool(processes=4)
    for prov,city,addr in city_list:
        all_city_result_tmp.append(pool.apply_async(get_ping_info, (create_time,prov,city,‘CTC‘,addr )))
    pool.close()
    pool.join()
    for city_info in all_city_result_tmp:
        #print city_info.get()
        all_city_result.append(city_info.get())

   


注意: 

1 all_city_result_tmp 只是多线程多线的列表,其中列表中的元素.get() 函数才会去执行元素对象,对象中有执行get_ping_info函数的信息和返回值



本文出自 “崔德华运维打工从业路” 博客,请务必保留此出处http://cuidehua.blog.51cto.com/5449828/1764707

python 多进程处理 multiprocessing模块

标签:python 多进程 处理列表   通过函数获取返回值   

原文地址:http://cuidehua.blog.51cto.com/5449828/1764707

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!