zoukankan      html  css  js  c++  java
  • 多进程模块 multiprocessing

    由于GIL的存在,python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程。

    multiprocessing包是Python中的多进程管理包。与threading.Thread类似,它可以利用multiprocessing.Process对象来创建一个进程。该进程可以运行在Python程序内部编写的函数。该Process对象与Thread对象的用法相同,也有start(), run(), join()的方法。此外multiprocessing包中也有Lock/Event/Semaphore/Condition类 (这些对象可以像多线程那样,通过参数传递给各个进程),用以同步进程,其用法与threading包中的同名类一致。所以,multiprocessing的很大一部份与threading使用同一套API,只不过换到了多进程的情境。

    示列1
    from multiprocessing import Process

    import time
    def f(name):
    time.sleep(1)
    print('hello', name,time.ctime())

    if __name__ == '__main__':
    p_list=[]
    for i in range(3):
    p = Process(target=f, args=('alvin',))
    p_list.append(p)
    p.start()
    for i in p_list:
    p.join()
    print('end')

    示列2
    from multiprocessing import Process
    import time
    class MyProcess(Process):
        def __init__(self):
            super(MyProcess, self).__init__()
            #self.name = name
    
        def run(self):
            time.sleep(1)
            print ('hello', self.name,time.ctime())
    
    if __name__ == '__main__':
        p_list=[]
        for i in range(3):
            p = MyProcess()
            p.start()
            p_list.append(p)
        for p in p_list:
            p.join()
        print('end')

    示列3 守护进程设置

    from multiprocessing import Process
    import time
    def f(name):
    time.sleep(1)
    print('hello', name,time.ctime())

    if __name__ == '__main__':
    p_list=[]
    for i in range(3):
    p = Process(target=f, args=('alvin',))
    p.daemon= True #设置守护进程设置 跟 守护线程一样
    p_list.append(p)
    p.start()
    print("end")

    构造方法:

    Process([group [, target [, name [, args [, kwargs]]]]])

      group: 线程组,目前还没有实现,库引用中提示必须是None; 
      target: 要执行的方法; 
      name: 进程名; 
      args/kwargs: 要传入方法的参数。

    
    

    实例方法:

      is_alive():返回进程是否在运行。

      join([timeout]):阻塞当前上下文环境的进程程,直到调用此方法的进程终止或到达指定的timeout(可选参数)。

      start():进程准备就绪,等待CPU调度

      run():strat()调用run方法,如果实例进程时未制定传入target,这star执行t默认run()方法。

      terminate():不管任务是否完成,立即停止工作进程

    
    

    属性:

      daemon:和线程的setDeamon功能一样

      name:进程名字。

      pid:进程号。



  • 相关阅读:
    POJ 2955
    POJ 1276 多重背包
    UVA 11584 划分回文字串
    Uva 11400 照明系统
    POJ 2677 Tour
    Uva 437 巴比伦塔 && UVA10003
    12563 Jin Ge Jin Qu hao
    最小公共祖先 (Tarjan) POJ1470
    DB2
    SQLserver数据库
  • 原文地址:https://www.cnblogs.com/ajaxa/p/9143655.html
Copyright © 2011-2022 走看看