zoukankan      html  css  js  c++  java
  • 并发编程

    join用法(等待子进程运行完)

    from multiprocessing import Process
    import time,os
    
    def task(s):
        time.sleep(s)
    
    
    if __name__ == '__main__':
    
        p1 = Process(target=task,args=(100,))
        p2 = Process(target=task,args=(2,))
        p3 = Process(target=task,args=(3,))
    
        p1.start()
        p2.start()
        p3.start()
        p1.join() # 等1s,
        p2.join() # 等1s,
        p3.join() # 等1s,内部会调用wait()
        print(p1.pid)
        print('子',p1.pid)
        print('主',os.getpid()) # 主进程要等待所有的子进程结束才会结束.因为主进程要在结束前回收僵尸进程.(*****)
    
    

    terminate的用法(杀死进程)

     	p = Process(target=foo)
        p.start()
        p.terminate() # 给操作系统发了一个请求  强行终止进程p 可能需要一点时间
        print(p.is_alive()) # True   is_alive() 判断子进程是否活着
        p.join()
        print(p.is_alive()) # False
    

    daemon(守护进程)

    if __name__ == '__main__':
        p = Process(target=task)
        p.daemon = True  ## 主进程结束,子进程也会结束
        p.start()
        time.sleep(2)
        print('主')    
    

    进程锁 : 是把锁住的代码变成了串行

    join 是把所有的子进程变成了串行

    lock = Lock() # 写在主进程是为了让子进程拿到同一把锁.
    

    Queue(队列)

    q = Queue(n)  ##n是队列的容量
    q.put('xxx') ##放数据
    q.get()  ##拿数据
    拿或者取的时候没有值时会卡住
    q = Queue()
    q.put_nowait('666') # block = False
    print(q.get_nowait()) #666
    

    JoinableQueue模块用法

    from multiprocessing import Process,Queue,JoinableQueue
    
    
    q = JoinableQueue()
    
    q.put('zhao') # 放队列里一个元素 +1
    q.put('qian')				  +1
    
    print(q.get())
    q.task_done() # 完成了一次任务 -1
    print(q.get())
    q.task_done() # 完成了一次任务 -1
    q.join() #计数器不为0的时候 阻塞等待计数器为0后通过
    
    # 想象成一个计数器 :put +1   task_done -1
    
  • 相关阅读:
    oracle的安装与plsql的环境配置
    Working with MSDTC
    soapui-java.lang.Exception Failed to load url
    Oracle 一个owner访问另一个owner的table,不加owner
    Call API relation to TLS 1.2
    Call API HTTP header Authorization: Basic
    VS2008 .csproj cannot be opened.The project type is not supported by this installat
    The changes couldn't be completed.Please reboot your computer and try again.
    Create DB Table View Procedure
    DB Change
  • 原文地址:https://www.cnblogs.com/oxtime/p/11527660.html
Copyright © 2011-2022 走看看