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

 更新时间:2017年06月14日 09:19:58   投稿:jingxian  
下面小编就为大家带来一篇python简单线程和协程学习心得(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

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+Opencv实现数字识别的示例代码

    Python+Opencv实现数字识别的示例代码

    这篇文章主要介绍了Python+Opencv实现数字识别的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Python 获取异常(Exception)信息的几种方法

    Python 获取异常(Exception)信息的几种方法

    这篇文章主要介绍了Python 获取异常(Exception)信息的几种方法,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-12-12
  • Python图像运算之图像阈值化处理详解

    Python图像运算之图像阈值化处理详解

    这篇文章将详细讲解图像阈值化处理,涉及阈值化处理、固定阈值化处理和自适应阈值化处理,这是图像边缘检测或图像增强等处理的基础,感兴趣的可以了解一下
    2022-04-04
  • Python中def的用法以及def是什么意思详解

    Python中def的用法以及def是什么意思详解

    这篇文章主要介绍了Python中def的用法以及def是什么意思的相关资料,文中介绍了Python中函数的定义和使用方法,还给出了详细的代码示例,需要的朋友可以参考下
    2024-10-10
  • 详解如何使用python实现猜数字游戏

    详解如何使用python实现猜数字游戏

    “猜数字”游戏是一款简单而有趣的小游戏,玩家需要在给定的范围内猜出一个由计算机随机生成的数字,本文将使用Python语言来实现这款游戏,并详细介绍其实现过程,文中有详细的代码示例供大家参考,需要的朋友可以参考下
    2024-04-04
  • Python小实例混合使用turtle和tkinter让小海龟互动起来

    Python小实例混合使用turtle和tkinter让小海龟互动起来

    Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口.Tk和Tkinter可以在大多数的Unix平台下使用,同样可以应用在Windows和Macintosh系统里.Tk8.0的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中
    2021-10-10
  • 一行代码让 Python 的运行速度提高100倍

    一行代码让 Python 的运行速度提高100倍

    python一直被病垢运行速度太慢,但是实际上python的执行效率并不慢,慢的是python用的解释器Cpython运行效率太差。这篇文章主要介绍了一行代码让 Python 的运行速度提高100倍的相关知识,需要的朋友可以参考下
    2018-10-10
  • Python学习之字典和集合的使用详解

    Python学习之字典和集合的使用详解

    Python 中字典和集合也是非常相近的概念,而且从外观看上去,也有那么一丝丝的相似。本文将从字典基本知识入手,为你展开字典类型数据的各个知识点,需要的可以参考一下
    2022-11-11
  • python 实现logging动态变更输出日志文件名

    python 实现logging动态变更输出日志文件名

    这篇文章主要介绍了python 实现logging动态变更输出日志文件名的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Pandas分组与排序的实现

    Pandas分组与排序的实现

    这篇文章主要介绍了Pandas分组与排序的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07

最新评论