zoukankan      html  css  js  c++  java
  • Python 34(进程重点)

    一:开启进程的两种方式(*****)

    #开启进程的方式一:
    from multiprocessing import Process
    import time
    
    
    def task(name):
        print('%s is running' % name)
        time.sleep(3)
        print('%s is done' % name)
    
    
    # 在window系统上,开启子进程的操作必须放到if __name__ == '__main__'的子代码中
    if __name__ == '__main__':
        p = Process(target=task, args=('nuanxin',))  # Process(target=task,kwargs={'name':'nuanxin'})
        p.start()  # 只是向操作系统发送了一个开启子进程的信号
        print('混世魔王')

    终端打印:

    子进程  is  running

    子进程  is  done

    Process finished with exit code 0

    # 开启进程的方式二:
    from multiprocessing import Process
    import time
    
    
    class Myprocess(Process):
        def __init__(self, name):
            super().__init__()
            self.name = name
    
        def run(self):
            print('%s is runing' % self.name)
            time.sleep(3)
            print('%s is done' % self.name)
    
    
    # windows系统上,开启子进程的操作系统必须放到if __name__ == '__main__'的子代码中
    if __name__ == '__main__':
        p = Myprocess('nuanxin')
        p.start()  # 只是向操作系统发送了一个开启进程的信号
        print('混世魔王')

    终端打印:

    子进程  is  running

    子进程  is  done

    Process finished with exit code 0

    二:进程对象的join方法(*****)

    # join:让主进程在原地等待,等待进程运行完毕,不会影响进程的执行
    from multiprocessing import Process
    import time
    
    
    def task(name, n):
        print('%s is running' % name)
        time.sleep(3)
        print('%s is done' % name)
    
    
    if __name__ == '__main__':
        p1 = Process(target=task, args=('子1', 1))
        p2 = Process(target=task, args=('子2', 2))
        p3 = Process(target=task, args=('子3', 3))
    
        start = time.time()
        p1.start()
        p2.start()
        p3.start()
        time.sleep(5)
    
        p3.join()  # 3
        p1.join()
        p2.join()
        print('混世魔王', (time.time() - start))  # 5.027485609054565  5.029683589935303  5.025939464569092
    
        start = time.time()
        p_l = []
        for i in range(1, 4):
            p = Process(target=task, args=('子%s' % i, i))
            p_l.append(p)
            p.start()
    
        for p in p_l:
            p.join()
            print('混世魔王', (time.time() - start))

    终端打印:

    子进程  is  running

    子进程  is  running

    子进程  is  running

    子进程  is  done

    子进程  is  done

    子进程  is  done

    Process finished with exit code 0
     

    三:进程对象之间内存空间隔离(*****)

    进程和进程之间的空间不会互相干扰,没办法直接获取另一个进程空间里的数据,要获取只有一种办法,就是写到文件里面再获取

    from multiprocessing import Process
    
    n=100
    def task():
        global n
        n=0
    
    if __name__ == '__main__':
        p=Process(target=task)
        p.start()
        p.join()
        print(n)
    View Code
  • 相关阅读:
    MyBatis-Generator 最佳实践
    Http请求工具
    多线程编程-之并发编程:阻塞队列
    如数据不存在就插入,存在就更新
    MySQL触发器
    13.multi_match实现dis_max+tie_breaker
    12. tie_breaker的使用原因和使用方法
    11.best fields策略(dis_max参数设置)
    10.多shard场景下relevence score可能不准确
    9.boost权重控制
  • 原文地址:https://www.cnblogs.com/zedong/p/9594095.html
Copyright © 2011-2022 走看看