python 多进程处理 multiprocessing模块

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



1 现场案例:


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


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

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


1
import  multiprocessing
1
2
3
4
5
6
7
8
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)



1
2
3
4
5
6
7
8
9
10
11
12
13
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函数的信息和返回值

本文转自残剑博客51CTO博客,原文链接http://blog.51cto.com/cuidehua/1764707如需转载请自行联系原作者


cuizhiliang

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值