需求:做一个程序等待用户输入,3秒内输入则会 echo 这个输入并立即退出。3秒内没输入则自动退出。

实现方法:

1. 线程(错误示范)

import 

首先启动两个线程,并把等待输入的 get_input 设置成 daemon。于是 3 秒后,整个程序退出,3 秒内可以获得输入。
这个程序最大的问题在于,获得输入后并不会立即退出,而是无论如何都要等 3 秒。

2. 线程 + 队列

import 

这个程序完全实现了需求。原理在于给 q 设置超时退出。想要让 wait 提前退出,则往队列放东西。

3. 线程 + 事件

import 

这个版本基本我能想到的线程版本的最优版本了。代码简洁且只需要一个库。
Event() 对象可以用 wait 方法来阻塞。e.set() 的作用是解除阻塞。

4. 协程

import 

ensure_future 表示把协程注册到 event loop 里。
add_reader 表示把 sys.stdin 这个文件的输入事件和函数 echo 绑定,由于 echo 需要传参,因此用到了 functools.partial。
loop.run_forever 不需要参数,因为前面两行已经注册事件到 loop 了,就不用传参了。
一旦两个事件中任意一个完成,loop.close() 就触发。

延伸(错误示范)

import 

这里,run_until_complete 必须传入一个 Future 对象作为参数。于是我把 timeout 传入。
然而,这个程序有个问题:
在 echo 中触发 loop.stop 会报错,说 Future 没有完成就停止 loop 了。除非写成:

try

但是这样不够优雅,建议用 run_forever。

input 输入事件_输入超时为例学习 Python 的线程和协程相关推荐

  1. python协程是什么_在python中线程和协程的区别是什么

    在python中线程和协程的区别:1.一个线程可以拥有多个协程,这样在python中就能使用多核CPU:2.线程是同步机制,而协程是异步:3. 协程能保留上一次调用时的状态,每次过程重入时,就相当于进 ...

  2. python 彩票排列组合_对福彩3D号码进行排列组合为例学习Python的itertools模块的用法...

    这里我们以对福彩3D号码进行排列组合为例学习Python的itertools模块的用法.首先我们选择心仪的号码.比如我们选择4,5,7,8 第一种我们只要组六的组合.代码如下 import itert ...

  3. python 多线程和协程结合_一文讲透 “进程、线程、协程”

    本文从操作系统原理出发结合代码实践讲解了以下内容: 什么是进程,线程和协程? 它们之间的关系是什么? 为什么说Python中的多线程是伪多线程? 不同的应用场景该如何选择技术方案? ... 什么是进程 ...

  4. python 线程超时设置_python多任务之总结——(二)线程、协程

    本文主要讲述进程线程协程在python中的使用.主要说明各自的创建.通信及联系与区别,了解各自的适用场景,能更好的利用并发实现多任务开发. 第一部分:python多任务之总结--(一)进程学习 线程 ...

  5. 操作系统的线程和进程的区别_进程,线程,协程,有何区别?

    进程 ​ cpu是计算机的核心,主要处理计算机的计算任务.操作系统是计算机的管理员,它负责任务的调度,资源的管理和分配,统一管理计算机的硬件资源.应用程序则是具有某种功能的程序,应用程序运行于操作系统 ...

  6. Python进阶(5)_进程与线程之协程、I/O模型

    三.协程 3.1协程概念 协程:又称微线程,纤程.英文名Coroutine.一句话说明什么是线程:协程是一种用户态的轻量级线程. 协程拥有自己的寄存器上下文和栈.协程调度切换时,将寄存器上下文和栈保存 ...

  7. mac的python怎么输入中文_帮你解决mac上python没法输入中文问题

    我是做互联网运营的,但是想跨点界,学点代码来提高工作效率.经过咨询,做技术的同事推荐学习python.我执行力杠杠的哈,找了个网络课程,教python入门,根据老师的介绍去网站:http://www. ...

  8. 【复习】进程、线程、协程篇,线程锁之Lock\Rlock\信号量、Event事件、Queue队列

    操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者消费者模型 ...

  9. python语言的单行注释以井号开头_推荐|零基础学习Python基础知识

    原标题:推荐|零基础学习Python基础知识 Python是一种面向对象.解释型计算机程序设计语言.语法简洁清晰,强制用空白符作为语句缩进. Python具有丰富和强大的库,又被称为胶水语言.能把其他 ...

最新文章

  1. java美容美发项目下载_基于jsp的美容美发管理-JavaEE实现美容美发管理 - java项目源码...
  2. 老李分享:HTTP协议之请求和响应
  3. 1001. [BJOI2006]狼抓兔子【最小割】
  4. Sass学习笔记(一)
  5. eclipse批量修改package、import中的包名
  6. Faster RCNN算法详解
  7. idea配置的导入导出
  8. abb工业机器人教程 zxw_【ABB工业机器人应用】YUMI-软管装配
  9. sql大小写 效率_【SQL】单行函数
  10. 湿气重的人,脸上会有哪些信号?
  11. android在线查看源码工具
  12. perl--CGI编程之Apache服务器安装配置
  13. ini配置文件读写(大华)
  14. 19. 各种提权姿势总结
  15. linux打印机pdf,在Deepin系统下安装CPUS-PDF虚拟PDF打印机的方法
  16. Angular 依赖注入框架里 useExisting 和 useClass 的使用场景
  17. 《自己动手写cpu》读书笔记
  18. 调节e18-d80nk的测量距离_没有倒车影像,用这个方法判断后方墙壁距离,这个距离感这样练习...
  19. 解决新版浏览器autoplay不能自动播放的问题
  20. 对摄影术语(及其在光线追踪的应用)的简要概括

热门文章

  1. linux gunzip r .tar,Linux命令之文件归档、压缩、解压缩tar,gzip,gunzip,bzip2,bunz -电脑资料...
  2. 织梦文章添加字段填栏目id,内容页调用字段里的栏目文章
  3. 单链表的初始化,整表创建,单个元素插入,单个元素删除,整表删除等操作...
  4. iOS之加密的三种方法
  5. IOS学习:常用第三方库(GDataXMLNode:xml解析库)
  6. Python之OS模块进程管理介绍--os.fork()
  7. C++基础知识简答题
  8. ubuntu要更新18.04了,lei了lei了~~~
  9. 华为这个事,是不是刷KPI?
  10. 一个超强的逆向分析软件