• 并发 --- 3 管道 事件 信号量 进程池 回调函数


    一.管道(多个时数据不安全)   Pipe 类  

        (像队列一样,数据只能取走一次)

      conn1,conn2 = Pipe()     建立管道

      .send()   发送

      .recv()   接收

    二.事件(等待)     Event类

      名 = Event()   建立一个事件(默认状态为False)
      名.set() 改变值为True
      名.clear() 改变值为False
      名.is_set() 查看事件的状态
      名.wait() 如果状态是False 阻塞
                  True 不阻塞

    三.信号量    Semaphore类

       (进程锁时只允许串行,而信号量允许多个)

      内部维护了一个计数器,acquire-1,release+1,

      0的时候,其他的进程都要在acquire之前等待

      名 = Semaphore(数量)

      名.acquire()

      锁的代码

      名.release()

    四.进程池

      (进程的创建和销毁是很有消耗的,影响代码执行效率

      名 = Pool(数量)

      1.   名.map(函数,迭代):异步提交任务,并且传参需要可迭代类型的数据,

                  自带closejoin功能

    多进程和进程池的效率比较:

      2.res = apply(f1,args=(i,))  #同步执行任务,必须等任务执行结束

          才能给进程池提交下一个任务,可以直接拿到返回结果res

     

      3.res_obj = apply_async(f1,args=(i,))  #异步提交任务,

        可以直接拿到结果对象,从结果对象里面拿结果,要用get方法,

        get方法会阻塞程序,没有拿到结果会一直等待

     

      4.Close : 锁住进程池,防止有其他的新的任务在提交给进程池

          Join : 等待着进程池将自己里面的任务都执行完

    五.回调函数(进程池Pool类)

      Apply_async(f1,args=(i,),callback=function)  

      #将前面f1这个任务的返回结果作为参数传给callback指定的那个function函数

  • 相关阅读:
    scrapy中selenium的应用
    Django的锁和事务
    redis
    【leetcode】187. Repeated DNA Sequences
    【leetcode】688. Knight Probability in Chessboard
    【leetcode】576. Out of Boundary Paths
    【leetcode】947. Most Stones Removed with Same Row or Column
    【leetcode】948. Bag of Tokens
    【leetcode】946. Validate Stack Sequences
    【leetcode】945. Minimum Increment to Make Array Unique
  • 原文地址:https://www.cnblogs.com/sc-1067178406/p/10251363.html
Copyright © 2020-2023  润新知