python简单线程和协程的实例详解

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

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

from threading import Threadimport timedef countdown(n):    while n > 0:        print('T-minus:', n)        n -= 1t = 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 Queuefrom threading import Threadclass 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)

登录后复制

  

立即学习“Python免费学习笔记(深入)”;

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

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

from collections import dequedef 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 

登录后复制

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

python简单线程和协程的实例详解

以上就是python简单线程和协程的实例详解的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2270327.html

(0)
上一篇 2025年2月27日 11:38:27
下一篇 2025年2月19日 12:49:17

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • python基础详解

    目录 python数据类型 python的运算符 Python的循环与判断语句 python练习 Python作业 立即学习“Python免费学习笔记(深入)”; 一.  Python的数据类型   1. 整型(int) .  赋值  nu…

    2025年2月27日 编程技术
    200
  • python中装饰器的简单介绍

    装饰器前奏1 定义:本质是函数,用来装饰其它函数,就是为其他函数来添加附加功能 原则:1、不能修改被修饰函数的源代码以及调用方式 装饰器前奏2   登录后复制登录后复制 import timedef timer(func):def warp…

    编程技术 2025年2月27日
    200
  • NLTK学习:分类和标注词汇

    词性标注器 之后的很多工作都需要标注完的词汇。nltk自带英文标注器pos_tag import nltktext = nltk.word_tokenize(“And now for something compleyely differe…

    编程技术 2025年2月27日
    200
  • python基础知识教学

    第一节 Python文件类型 源代码 python源代码的文件以“py”为扩展名,由python程序解释,不需要编译 字节代码 Python源文件经编译后生成的扩展名为“pyc”的文件 编译方法 import py_compilepy_co…

    编程技术 2025年2月27日
    200
  • python生成词云方法教程

    期末复习比较忙过段时间来专门写scrapy框架使用,今天介绍如何用python生成词云,虽然网上有很多词云生成工具,不过自己用python来写是不是更有成就感。 今天要生成的是励志歌曲的词云,百度文库里面找了20来首,如《倔强》,海阔天空是…

    2025年2月27日
    200
  • 简单FTP的实现详解

    作业要示: 开发简单的FTP:1. 用户登陆2. 上传/下载文件3. 不同用户家目录不同4. 查看当前目录下文件5. 充分使用面向对象知识      REDMAE 1 用户登陆 2 3 1、查看用户目录文件 4 2、上传文件, 5 3、下载…

    2025年2月27日 编程技术
    200
  • python正则的使用方法

    python的正则是通过re模块的支持 匹配的3个函数 match :只从字符串的开始与正则表达式匹配,匹配成功返回matchobject,否则返回none; re.match(pattern, string, flags=0) ##fla…

    编程技术 2025年2月27日
    200
  • 分享Python常用的排序实例

    排序算法的稳定性及意义 冒泡排序 复杂度与稳定性 选择排序 插入排序 立即学习“Python免费学习笔记(深入)”; 希尔排序 快速排序 常见排序算法效率比较 排序算法的稳定性及意义 在待排序的序列中,存在具有相同关键字的记录,在排序后这些…

    2025年2月27日
    200
  • 利用Python抓取花瓣网美图实例

    一:前言 嘀嘀嘀,上车请刷卡。昨天看到了不错的图片分享网——花瓣,里面的图片质量还不错,所以利用selenium+xpath我把它的妹子的栏目下爬取了下来,以图片栏目名称给文件夹命名分类保存到电脑中。这个妹子主页 是动态加载的,如果想获取更…

    2025年2月27日 编程技术
    200
  • python 安装与使用方法介绍

    python 安装                                                                                               windows: 1、下载安装包…

    2025年2月27日 编程技术
    200

发表回复

登录后才能评论