python简单线程和协程学习心得(分享)


Posted in Python onJune 14, 2017

python中对线程的支持的确不够,不过据说python有足够完备的异步网络框架模块,希望日后能学习到,这里就简单的对python中的线程做个总结

threading库可用来在单独的线程中执行任意的python可调用对象。尽管此模块对线程相关操作的支持不够,但是我们还是能够用简单的线程来处理I/O操作,以减低程序响应时间。

from threading import Thread
import time
 
 
def countdown(n):
  while n > 0:
    print('T-minus:', n)
    n -= 1
 
 
t = Thread(target=countdown, args=(10,))
t.start() # 开启线程
 
time.sleep(2)
 
if t.is_alive() is True:
  print("停止线程...")
  t._stop() # 停止线程

start函数是用来开启线程的,_stop函数是用来停止线程的。为了防止在线程中进行I/O操作时出现阻塞等问题,运行一段时间之后,可以判断线程是否还存活,如果线程还存在就调用_stop()停止,防止阻塞(你可以将_stop函数封装到类中,我这里并没有这么做)。

当然,你可以调用ThreadPool线程池来处理,而不是手动创建线程。如果线程间不需要共享变量的话,使用线程还是很方便的,可以减少很多的麻烦操作以及省时。如果需要在线程间进行通信,我们可以使用队列来实现:

from queue import Queue
from threading import Thread
 
 
class kill:
  def terminate(self, t):
    if t.isAlive is True:
      t._stop()
 
 
def product(out_q):
  for i in range(5):
      out_q.put(i)
 
 
def consumer(in_q):
  for i in range(5):
    print(in_q.get())
 
 
q = Queue()
t1 = Thread(target=consumer, args=(q,))
t2 = Thread(target=product, args=(q,))
t1.start()
t2.start()
 
 
k = kill() # 查询线程是否终止,防止阻塞...
k.terminate(t1)
k.terminate(t2)

Queue实例会被所有的线程共享,同时它又拥有了所有所需要的锁,因此它们可以安全的在任意多的线程中共享。在这里要注意,不要再多线程中使用除了put(),get()方法之外的queue类的方法,因为在多线程环境中这是不可靠的!对于简单的小型的线程中数据的通信,可以使用队列来处理。如果是大型的数据需要交互通信,python提供了相关的模块你可以使用,具体的u need baidu.

所谓协程,其实就是在单线程的环境下的yield程序。

from collections import deque
 
 
def countdown(n):
  while n > 0:
    print("T-minus", n)
    yield # 返回之后下次直接从这里执行...相当于C#里面得yield return .
    n -= 1
  print("this is countdown!!!")
 
 
def countup(n):
  x = 0
  while x < n:
    print("Counting up", x)
    yield
    x += 1
 
 
class TaskScheduler:
  def __init__(self):
    self._task_queue = deque()
 
  def new_task(self, task):
    self._task_queue.append(task)
 
  def run(self):
    while self._task_queue:
      task = self._task_queue.popleft()
      try:
        next(task)
        self._task_queue.append(task)
      except StopIteration:
        pass
 
 
sche = TaskScheduler()
sche.new_task(countdown(10))
sche.new_task(countdown(5))
sche.new_task(countup(15))
sche.run()

在这里说下自己这段时间使用python的心得,python的确不错,但性能也是为人诟病,一开始学习python,我也是去做一些比较炫的程序,最起码听起来逼格高,比如使用python的自然语言处理来做情感分析以及最热的爬虫程序,还有做炫的数据分析图表。渐渐地,我就放下了那些,因为程序的重点不在那些,只要你会点基本的语法,看得懂官方文档就能够做出来,而程序代码的重点在性能,优化。最大程度的写出功能最完善,性能最优,结构最优美的程序,其实这就有点像是政治老师常说的"文化软实力",程序中的"软实力"应该是在程序中嵌入最适合的设计模式,做最完备的程序优化,采用最省性能的数据结构等。

以上这篇python简单线程和协程学习心得(分享)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python使用arp欺骗伪造网关的方法
Apr 24 Python
python将文本转换成图片输出的方法
Apr 28 Python
关于Python中浮点数精度处理的技巧总结
Aug 10 Python
解决出现Incorrect integer value: '' for column 'id' at row 1的问题
Oct 29 Python
Python生成数字图片代码分享
Oct 31 Python
十行代码使用Python写一个USB病毒
Jun 21 Python
python画图--输出指定像素点的颜色值方法
Jul 03 Python
浅析PyTorch中nn.Linear的使用
Aug 18 Python
PyTorch中 tensor.detach() 和 tensor.data 的区别详解
Jan 06 Python
Python交互环境下打印和输入函数的实例内容
Feb 16 Python
使用python批量修改XML文件中图像的depth值
Jul 22 Python
matplotlib.pyplot.plot()参数使用详解
Jul 28 Python
Python字符串处理实现单词反转
Jun 14 #Python
python3实现UDP协议的服务器和客户端
Jun 14 #Python
老生常谈Python基础之字符编码
Jun 14 #Python
python3实现TCP协议的简单服务器和客户端案例(分享)
Jun 14 #Python
Python之re操作方法(详解)
Jun 14 #Python
Python之py2exe打包工具详解
Jun 14 #Python
使用XML库的方式,实现RPC通信的方法(推荐)
Jun 14 #Python
You might like
获得Google PR值的PHP代码
2007/01/28 PHP
php 解决旧系统 查出所有数据分页的类
2012/08/27 PHP
PHP判断IP并转跳到相应城市分站的方法
2015/03/25 PHP
PHP面向对象程序设计__tostring()和__invoke()用法分析
2019/06/12 PHP
用AJAX返回HTML片段中的JavaScript脚本
2010/01/04 Javascript
Javascript下判断是否为闰年的Datetime包
2010/10/26 Javascript
Ajax提交与传统表单提交的区别说明
2014/02/07 Javascript
使用 TypeScript 重新编写的 JavaScript 坦克大战游戏代码
2015/04/07 Javascript
JavaScript 表单处理实现代码
2015/04/13 Javascript
nodejs实现HTTPS发起POST请求
2015/04/23 NodeJs
jQuery实现的给图片点赞+1动画效果(附在线演示及demo源码下载)
2015/12/31 Javascript
jquery简单插件制作(fn.extend)完整实例
2016/05/24 Javascript
详解Angular的双向数据绑定(MV-VM)
2016/12/26 Javascript
javaScript实现复选框全选反选事件详解
2020/11/20 Javascript
vue实现提示保存后退出的方法
2018/03/15 Javascript
十分钟教你上手ES2020新特性
2020/02/12 Javascript
Javascript组合继承方法代码实例解析
2020/04/02 Javascript
python爬虫入门教程--利用requests构建知乎API(三)
2017/05/25 Python
用xpath获取指定标签下的所有text的实例
2019/01/02 Python
Pandas中Series和DataFrame的索引实现
2019/06/27 Python
python3 自动识别usb连接状态,即对usb重连的判断方法
2019/07/03 Python
Django model update的多种用法介绍
2020/03/28 Python
Python3实现个位数字和十位数字对调, 其乘积不变
2020/05/03 Python
解决Ubuntu18中的pycharm不能调用tensorflow-gpu的问题
2020/09/17 Python
Python+logging输出到屏幕将log日志写入文件
2020/11/11 Python
使用python实现学生信息管理系统
2021/02/25 Python
英国购买威士忌网站:Master of Malt
2019/09/26 全球购物
大学生毕业求职简历的自我评价
2013/10/24 职场文书
科级干部考察材料
2014/02/15 职场文书
幼儿园保育员岗位职责
2014/04/13 职场文书
建筑施工安全生产责任书
2014/07/22 职场文书
师德先进个人事迹材料
2014/12/19 职场文书
总经理岗位职责范本
2015/04/01 职场文书
教师文明餐桌光盘行动倡议书
2015/04/28 职场文书
全家福照片寄语怎么写?
2019/04/02 职场文书
用position:sticky完美解决小程序吸顶问题的实现方法
2021/04/24 HTML / CSS