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
    
  • 相关阅读:
    Extjs 4.0 Grid 数据绑定 json 分页 不分页
    [转]AS语言基础
    tig支持中文搜索
    LPC及MudOS简介(一)
    欢送2012
    存储器性能测试
    为什么go语言适合开发网游服务器端
    从一段代码里看FreeBSD与Linux内存分配的不同
    新的开始
    多语言协作与二进制交互
  • 原文地址:https://www.cnblogs.com/oxtime/p/11527660.html
Copyright © 2011-2022 走看看