• python类库32[多进程之Pool+Logging]



    一 pool

    multiprocessing.pool也就是传说中的进程池,pool的构造如下 

    multiprocessing.Pool([processes[, initializer[, initargs[, maxtasksperchild]]]]) 中,

    processes表示pool中进程的数目,默认地为当前CPU的核数。

    initializer表示新进程的初始化函数。

    initargs表示新进程的初始化函数的参数。

    maxtasksperchild表示每个进程执行task的最大数目。

    apply()用来为pool中的进程赋予task。

    map()用来循环地为pool中的进程赋予tasks。

    close()用来阻止新的task的提交到pool中,一但已有的tasks都完成后,pool将退出。

    terminate()用来立即停止pool中所有的进程。

    join()等待pool中所有的进程退出。

    实例:

    import multiprocessing
    import time

    def do_calculation(data):
        print(multiprocessing.current_process().name)
        time.sleep(3)
        return data * 2

    def start_process():
        print ('Starting', multiprocessing.current_process().name)

    if __name__ == '__main__':
        inputs = list(range(10))
        print ('Input   :' + str(inputs)) 
        
        pool_size = multiprocessing.cpu_count()
        pool = multiprocessing.Pool(processes=pool_size,
                                    initializer=start_process,
                                    )
        pool_outputs = pool.map(do_calculation, inputs)
        pool.close() # no more tasks
        pool.join()  # wrap up current tasks

        print ('Pool    :' + str(pool_outputs))
        

    运行结果:


    上面的实例中可以看到当前的CPU是8core的,pool中公有8个进程,但是有10个任务,其中有2个进程处理了2个任务。

    二 logging

    使用multiprocessing启动的logger来帮助调试多进程。例如:

    logger = multiprocessing.log_to_stderr(logging.DEBUG)

    logger.debug("Test") 

    完!

  • 相关阅读:
    营销运营中会遇到的名词及解释
    常用excel函数公式及操作示例
    opensuse安装pycharm
    Atom 基础使用
    git使用
    初学Python(第一课)
    django新手第一课
    浅谈session,cookie,sessionStorage,localStorage的区别及应用场景
    事件冒泡的应用
    django站点管理
  • 原文地址:https://www.cnblogs.com/itech/p/2318178.html
Copyright © 2020-2023  润新知