zoukankan      html  css  js  c++  java
  • Python学习-八周二次课(12月12日)

    八周二次课(12月12日)
    14.6 多进程Manager
    14.7 进程池

    Manager

    Manager对象类似于服务器与客户之间的通信 (server-client),与我们在Internet上的活动很类似。我们用一个进程作为服务器,建立Manager来真正存放资源。其它的进程可以通过参数传递或者根据地址来访问Manager,建立连接后,操作服务器上的资源。在防火墙允许的情况下,我们完全可以将Manager运用于多计算机,从而模仿了一个真实的网络情境。下面的例子中,我们对Manager的使用类似于shared memory,但可以共享更丰富的对象类型。

    复制代码
    import multiprocessing
    
    def f(x, arr, l):
        x.value = 3.14
        arr[0] = 5
        l.append('Hello')
    
    server = multiprocessing.Manager()
    x    = server.Value('d', 0.0)
    arr  = server.Array('i', range(10))
    l    = server.list()
    
    proc = multiprocessing.Process(target=f, args=(x, arr, l))
    proc.start()
    proc.join()
    
    print(x.value)
    print(arr)
    print(l)
    复制代码

    Manager利用list()方法提供了表的共享方式。实际上你可以利用dict()来共享词典,Lock()来共享threading.Lock(注意,我们共享的是threading.Lock,而不是进程的mutiprocessing.Lock。后者本身已经实现了进程共享)等。 这样Manager就允许我们共享更多样的对象

    进程池 (Process Pool)可以创建多个进程。

    比如下面的程序:

    复制代码
    import multiprocessing as mul
    
    def f(x):
        return x**2
    
    pool = mul.Pool(5)
    rel  = pool.map(f,[1,2,3,4,5,6,7,8,9,10])
    print(rel)
    复制代码

    我们创建了一个容许5个进程的进程池 (Process Pool) 。Pool运行的每个进程都执行f()函数。我们利用map()方法,将f()函数作用到表的每个元素上。这与built-in的map()函数类似,只是这里用5个进程并行处理。如果进程运行结束后,还有需要处理的元素,那么的进程会被用于重新运行f()函数。除了map()方法外,Pool还有下面的常用方法。

    apply_async(func,args)  从进程池中取出一个进程执行func,args为func的参数。它将返回一个AsyncResult的对象,你可以对该对象调用get()方法以获得结果。

    close()  进程池不再创建新的进程

    join()   wait进程池中的全部进程。必须对Pool先调用close()方法才能join。

  • 相关阅读:
    actionscript中的sound类控制音频文件的操作示例
    Flash Media Server安装与使用入门教程(转)
    输出stage.displayState等于null原因
    flash播放音频显示波形
    flash camera类操作摄像头示例
    利用flash中的Video类播放flv格式文件,每次播放十秒左右就无故停止解决方法
    1046: 找不到类型,或者它不是编译时常数: Label 解决方案
    flash和js通信实例
    8.17Go之条件语句Switch
    8.18Go之变量作用域
  • 原文地址:https://www.cnblogs.com/zhuntidaoren/p/8026761.html
Copyright © 2011-2022 走看看