zoukankan      html  css  js  c++  java
  • 并发 --- 34 线程的其他方法 协程

    一.线程的其他方法

      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('主程序任务')
     
  • 相关阅读:
    第12课 计算器核心解析算法(上)
    第11课 Qt中的字符串类
    第10课 初探 Qt 中的消息处理
    第9课 计算器界面代码重构
    第8课 启航!第一个应用实例
    第7课 Qt中的坐标系统
    第6课 窗口部件及窗口类型
    第5课 Qt Creator工程介绍
    第4课 Hello QT
    给Linux内核增加一个系统调用的方法(转)
  • 原文地址:https://www.cnblogs.com/amirky/p/10268611.html
Copyright © 2011-2022 走看看