• 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], floatelse 0
        #if max_time and average_time is None use 0
        average_time = float('%.3f'% result[1]) if isinstance(result[2], floatelse 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

  • 相关阅读:
    tp5使用外部类的三种方法
    thinkphp5中php7中运行会出现No input file specified. 这个你改个东西
    21.Yii2.0框架多表关联一对多查询之性能优化--模型的使用
    20.Yii2.0框架多表关联一对多查询之hasMany
    19.Yii2.0框架模型删除记录
    18.Yii2.0框架模型修改记录 和 修改点击量
    17.Yii2.0框架模型添加记录
    15.Yii2.0框架where单表查询
    14-15.Yii2.0模型的创建/读取数据使用,框架防止sql注入
    12.Yii2.0框架视图模版继承与模版相互调用
  • 原文地址:https://www.cnblogs.com/twodog/p/12138495.html
Copyright © 2020-2023  润新知