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

v2-a85db2f04b350d6fe34d7f2116ba82b9_1440w.jpg?source=172ae18b

需求:做一个程序等待用户输入,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。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/472845.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PHP,Mysql-根据一个给定经纬度的点,进行附近地点查询–合理利用算法,效率提高2125倍...

目前的工作是需要对用户的一些数据进行分析,每个用户都有若干条记录,每条记录中有用户的一个位置,是用经度和纬度表示的。 还有一个给定的数据库,存储的是一些已知地点以及他们的经纬度,内有43W多条的数据。 现在需要拿…

js固定表格行列_纯前端表格控件SpreadJS V14.0发布:组件化编辑器+数据透视表

SpreadJS 是一款基于 HTML5 的纯前端表格控件,兼容 450 种以上的 Excel 公式,具备“高性能、跨平台、与 Excel 高度兼容”的产品特性,可为用户提供高度类似 Excel 的功能,满足 Web Excel组件开发、 表格文档协同编辑、 数据填报、…

天池 在线编程 区间统计(队列)

文章目录1. 题目2. 解题1. 题目 给定一个01数组 arr 和 一个整数 k, 统计有多少区间符合如下条件: 区间的两个端点都为 0 (允许区间长度为1)区间内 1 的个数不多于 k arr 的大小不超过 10^5 样例 1: 输入: arr [0, 0, 1, 0, 1, 1, 0], k 1 输出: 7 解释: [0, 0], [1, 1],…

android 模糊查询控件_第三十二篇:在SOUI2.0中像android一样使用资源

SOUI2.0之前,在SOUI中使用资源通常是直接使用这个资源的name(一个字符串)来引用。使用字符串的好处在于字符串能够表达这个资源的意义,因此使用字符串也是现代UI引擎常用的方式。尽管直接使用字符串有意义明确的优点,它同样也有缺点&#xff…

采用java信号量(semaphore)让线程轮流打印

semaphore是java.util.concurrent包下的并发工具类。 A counting semaphore. Conceptually, a semaphore maintains a set of permits. Each acquire() blocks if necessary until a permit is available, and then takes it. Each release() adds a permit, potentially relea…

天池 在线编程 有序队列

文章目录1. 题目2. 解题1. 题目 给出了一个由小写字母组成的字符串 S。 然后,我们可以进行任意次数的移动。 在每次移动中,我们选择前 K 个字母中的一个(从左侧开始),将其从原位置移除,并放置在字符串的末…

网站搜索功能怎么实现_电商网站上的搜索功能是如何实现的?

今天是刘小爱自学Java的第159天。感谢你的观看,谢谢你。学习计划安排如下:索引库本质上和数据库类似,也是存储数据的,既然如此自然也会有增删改查。那么这个索引库到底有何特别应用呢?索引库的特别之处在于它的查询&am…

android蓝牙通信_Flutter通过BasicMessageChannel实现Flutter 与Android iOS 的双向通信

题记:——不到最后时刻,千万别轻言放弃,无论结局成功与否,只要你拼博过,尽力过,一切问心无愧。通过 Flutter 来进行移动应用开发,打包 Android 、iOS 双平台应用程序,在调用如相机、…

apache mysql php 安装配置_Windows下Apache,MySql,PHP安装配置

本文目标在Windows8.1 x64下 全手工安装Apache、PHP、MySQL,使用NetBeans调试第一个Hello,World!程序。安装Apache打开http://httpd.apache.org 左侧Download!点From a Mirror,看到当前最新稳定版本未2.4.12, 看到现在Windows的版本已经不像以…

MapReduce既是编程模型又是计算框架

learn from 从0开始学大数据&#xff08;极客时间&#xff09; MapReduce 编程模型 包含 Map 和 Reduce 两个过程 map 的主要输入是一对 <Key, Value> 值&#xff0c;输出一对 <Key, Value> 值将相同 Key 合并&#xff0c;形成 <Key, Value 集合 >再将这个…

python设置单元格宽度_Python xlwt-访问现有单元格内容,自动调整列宽

我刚刚实现了一个包装类&#xff0c;它跟踪输入项的宽度。看起来效果不错。import arial10 class FitSheetWrapper(object): """Try to fit columns to max size of any entry. To use, wrap this around a worksheet returned from the workbooks add_sheet me…

java mysql 流媒体_red5-rtmp-push

red5-rtmp-push介绍获取视频流 进行人脸识别后推送到red5服务器(人脸识别技术由虹软提供)整个系统共有两个项目组成启用说明1.主要是借用ifast框架,主要的服务类就一个,其他的都是多余的。2.首先修改 resources/application-dev.yml 中的 red5.url : rtmp://red5ip/oflaDemo/ 改…

工单更改历史记录(轉載)

一、自定义表结构 二、生产工单出口增强 三、查询报表 一、自定义表结构 表ZPCO02 MANDT MANDT CLNT 3 0 客户端 AUFNR AUFNR CHAR 12 0 订单号 MATNR MATNR CHAR 18 0 物料号 FILED FIELDNAME CHAR 30 0 字段名 AENAM AENAM CHAR 12 0 对象更改人员的名称 LAEDA LAEDA DATS 8 …

MapReduce 计算框架如何运作

learn from 从0开始学大数据&#xff08;极客时间&#xff09; 1. MapReduce 作业启动和运行机制 作业涉及三类关键进程&#xff1a; 大数据应用进程 这类进程是启动 MapReduce 程序的主入口&#xff0c;主要是指定 Map 和 Reduce 类、输入输出文件路径等&#xff0c;并提交作业…

python能做机器人吗_python深度学习 人工智能是做机器人吗?

我们经常听到”Python“与”人工智能“这两个词&#xff0c; 也很容易混淆这两个词&#xff0c; 那么Python和人工智能到底什么关系呢&#xff1f; Python人工智能工程师待遇怎么样&#xff1f; 通过这篇文章详细解答一下&#xff1a; 关于Python Python是一门计算机程序语言&a…

linux忘记mysql密码_Linux下忘记Mysql密码的找回方法(图)

Mysql隔一段时间不访问&#xff0c;也许你会忘记访问密码&#xff0c;这时该怎么办&#xff0c;重装mysql吗&#xff1f;这个代价也太大了&#xff0c;我们这里介绍两种恢复密码的方法。方法一&#xff1a;因为Mysql密码存储于数据库mysql中的user表中&#xff0c;所以我们只要…

单元测试的7种境界

1. 以各种借口拒绝单元测试Unit Test&#xff0c;比较常用的是“你没有足够的时间(进行单元测试)”。  无论是对单元测试的老手还是新手编写单元测试还是有一定得工作量的&#xff0c;而且单元测试也需要掌握大量的测试框架和工具(光一个junit或testng你很难工作地很happy)。…

Yarn 资源调度框架

learn from 从0开始学大数据&#xff08;极客时间&#xff09; Hadoop 主要是由三部分组成&#xff1a; 分布式文件系统 HDFS分布式计算框架 MapReduce分布式集群资源调度框架 Yarn Yarn 的架构

python连接sql数据库_python连接SQL数据库

前言 上次通过学习&#xff0c;懂得了如何通过不同的对象来定位页面的元素&#xff08;id,class_name,tag_name,xpath,css等&#xff09;&#xff0c;可以实现模拟点击的功能。当然&#xff0c;这只是初期的web自动化的一点小成绩。当你觉得这些都应用的差不多的情况下&#xf…

mysql mtop 使用_MYSQLMTOP监控环境搭建

MySQLMTOP是一个由PythonPHP开发的MySQL企业级监控系统。系统由Python实现多进程数据采集和告警&#xff0c;PHP实现WEB展示和管理。最重要是MySQL服务器无需安装任何Agent&#xff0c;只需在监控WEB界面配置相关数据库信息功能非常强大&#xff1a;可对上百台MySQL数据库的状态…