34 线程的其他方法 队列 线程池 协程

今日内容:

 

1 线程的其他方法

 

2 线程队列 (重点)

 

3 线程池(重点)

 

4协程

 

生成器

 

Greenlet模块

 

Gevent模块(重点)

 

 

 

今日内容回顾:

线程的其他方法:

Threading.current_thread() #当前线程对象

GetName() 获取线程名

Ident  获取线程id

 

Threading.Enumerate() #当前正在运行的线程对象的一个列表

Threading.active_count() #当前正在运行的线程数量

 

线程队列:(重点)

Import queue

先进先出队列:queue.Queue(3)

先进后出\后进先出队列:queue.LifoQueue(3)  

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

  Put的数据是一个元组,元组的第一个参数是优先级数字,数字越小优先级越高,越先被get到被取出来,第二个参数是put进去的值,如果说优先级相同,那么值别忘了应该是相同的数据类型,字典不行

 

线程池:

From concurrent_futures import ThreadPoolExecutor,ProcessPoolExecutor

 

P = ThreadPoolExecutor(4)  #默认的线程个数是cpu个数 * 5

P = ProcessPoolExecutor(4)  #默认的进程个数是cpu个数

P.map(f1,可迭代的对象)  #异步执行

Def f1(n1,n2):

Print(n1,n2)

P.submit(f1,11,12)  #异步提交任务

Res = P.submit(f1,11,12)

 

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

 

Shutdown() #close+join,锁定线程池,等待线程池中所有已经提交的任务全部执行完毕

 

 

今日作业

 

  1. 多线程实现 一个socket并发聊天,就是一个服务端同时与多个客户端进行沟通
  2. 写一个简易的socketserver
  3. 通过线程池做爬虫,通过回调函数来清洗爬取回来的数据,简单写,就是将爬取回来的网页内容,通过正则来匹配一些其中的内容,匹配其中的链接网址

 

01 线程的其他方法

02 线程队列

03 线程池

04 生成器版协程

05 greenlet版协程

06 gevent版真正的协程

07 线程池回调函数

 

posted on 2019-01-14 15:48  =.===  阅读(139)  评论(0编辑  收藏  举报

导航