zoukankan      html  css  js  c++  java
  • 并发 --- 5 线程的其他方法 线程队列 线程池 协程

    一.线程的其他方法

      1.   theading.current_thread()   当前线程对象

      2.   .getName()    获取线程名

      3.   .ident()   获取线程id

      4.    threading.enumerate()   当前正在运行的线程对象的一个列表

      5.    threading.active_count()   当前正在运行的线程数量

    二.线程队列

      1.先进先出队列    queue.Queue()

      2.先进后出队列    queue.LifoQueue()

      (和用法相同)

      3.优先级队列    queue.priorityQueue()

      Put的数据是一个元组,元组的第一个参数是优先级数字,

      数字越小优先级越高,越先被get到被取出来,第二个参数

      是put进去的值,如果说优先级相同,那么值别忘了应该是

      相同的数据类型,字典不行

    三.线程池

      1.from concurrent_futures import ThreadPoolExecutor,ProcessPoolExecutor

        引入模块

      2.  p = ThreadPoolExecutor(4)

        默认的线程个数是cpu个数的5倍

      3.  p = ProcessPoolExecutor(4)

        默认的进程个数是cpu的个数

      4.  p.map(f1,可迭代对象)

        异步执行

      5.  res = p.submit(f1,11,12)  

        异步提交任务  参数可是多个

      6.  res.result()

        (和.get方法一样,如果没有结果会等待,阻塞程序)

      7.  shutdown()   

        (和close+join用法一样,锁定线程池,等待线程池中的

        任务全部执行完毕)

       8.线程池的回调函数

    四.协程

      协程是一种用户态的轻量级线程,即协程是由用户程序自己控制调度的。

      1.生成器类型协程(实现了‘切换+保存状态’,但没有提升效率)

      2.greenlet模块类型协程(实现了‘切换+保存状态’,但没有提升效率)

     

      3.gevent模块类型的协程

      即实现了‘切换+保存状态’,又提升效率

    import gevent
    from gevent import monkey;monkey.patch_all()
    import time
    import threading
    def f1():
        print('第一次f1')
        # print(threading.current_thread().getName())
        # gevent.sleep(1)
        time.sleep(2)
        print('第二次f1')
    def f2():
        # print(threading.current_thread().getName())
        print('第一次f2')
        # gevent.sleep(2)
        time.sleep(2)
        print('第二次f2')
    g1 = gevent.spawn(f1) #异步提交了f1任务
    g2 = gevent.spawn(f2) #异步提交了f2任务
    # g1.join()
    # g2.join()
    gevent.joinall([g1,g2])
    print('主程序任务')
    

      

  • 相关阅读:
    使用jquery.validate.js实现boostrap3的校验和验证
    MySQL 随机取数据效率问题
    qq在线客服代码
    使用Shell脚本查找程序对应的进程ID,并杀死进程
    Redis-概述
    JVM的类加载机制
    volatile
    java内存相关
    设计模式--模板方法
    设计模式概述
  • 原文地址:https://www.cnblogs.com/sc-1067178406/p/10267607.html
Copyright © 2011-2022 走看看