基于tornado的实现的一个非阻塞的stdin

【系统架构设计师】2025年下半年真题论文回忆版及写作要点 本文摘要围绕云原生数据库、性能测试、无服务器架构和秒杀场景等关键技术进行论述。云原生数据库通过容器化、微服务和自动化运维实现弹性扩展;性能测试需要规划测试场景并关注响应时间等关键指标;无服务器架构以事件驱动为核心,简化开发流程;秒杀场景需组合运用扩容、缓存、限流等技术应对高并发。这些技术方案为构建现代高可用系统提供了重要参考。 阅读详情

安利一篇我翻译的国外大牛的神经网络入门文章

1. 代码细节

async_std.py
# -*- coding: utf-8 -*-

import sys
import errno

from tornado.util import errno_from_exception
from tornado.iostream import BaseIOStream
from tornado import gen
try:
    from tornado.platform.posix import _set_nonblocking
except ImportError:
    _set_nonblocking = None


_ERRNO_WOULDBLOCK = (errno.EWOULDBLOCK, errno.EAGAIN)


class UnblockStdIOStreamBase(BaseIOStream):
    """std-based `IOStream` implementation.
    """
    def __init__(self, fd, *args, **kwargs):
        self.fd = fd
        _set_nonblocking(fd)
        super(UnblockStdIOStreamBase, self).__init__(*args, **kwargs)

    def fileno(self):
        return self.fd

    def close_fd(self):
        self.fd.close()

    def write_to_fd(self, data):
        return self.fd.write(data)

    def read_from_fd(self):
        try:
            chunk = self.fd.read(self.read_chunk_size)
        except (IOError, OSError) as e:
            if errno_from_exception(e) in _ERRNO_WOULDBLOCK:
                return None
            elif errno_from_exception(e) == errno.EBADF:
                # If the writing half of a pipe is closed, select will
                # report it as readable but reads will fail with EBADF.
                self.close(exc_info=True)
                return None
            else:
                raise
        if not chunk:
            self.close()
            return None
        return chunk


class UnblockStdinStream(UnblockStdIOStreamBase):
    def __init__(self, io_loop):
        super(UnblockStdinStream, self).__init__(sys.stdin, io_loop=io_loop)

    @gen.coroutine
    def readline(self):
        ret = yield self.read_until('\n')
        raise gen.Return(ret)
test.py
# -*- coding: utf-8 -*-

import tornado.ioloop
from tornado import gen
from async_std import UnblockStdinStream

ioloop = tornado.ioloop.IOLoop.instance()

_std = UnblockStdinStream(io_loop=ioloop)


@gen.coroutine
def test():
    while True:
        ret = yield _std.readline()
        print(ret)


@gen.coroutine
def test2():
    while True:
        yield gen.sleep(2)
        print('sleep 2s')


ioloop.add_callback(test)
ioloop.add_callback(test2)
ioloop.start()

2. 测试

# python test.py
sleep 2s
sleep 2s
sleep 2s
sleep 2s
sleep 2s
qwwer   -----手动从屏幕输入
qwwer   -----程序打印结果

sleep 2s
sleep 2s
sleep 2s

####另外安利我写的两个模块,欢迎使用或贡献代码:
一个命令行版本的zookeeper cli
一个tornado web app框架快速生成工具
欢迎关注我的github

【系统分析师】2009年真题:综合知识-答案及详解 在某银行业务的用例模型中,“取款”用例需要等到“存款”用例执行之后才能执行,两个用例之间的关系属于(1);“取款”和“存款”两个用例中都需 要执行查询余额的功能,将查询余额提取成独立的用例,那么“取款”和“存款” 用例与“查询余额”用例之间的关系属于(2)。(1)A. 关联关系 B. 扩展关系 C. 使用关系 D. 依赖关系 (2)A. 扩展关系 B. 使用关系 C. 依赖关系 D. 继承关系【参考答案】D、A雇员类含有计算报酬的行为,利用面向对象的(3),可以使得其派生类专职 雇员类和兼职雇员类计算报酬的 阅读详情

相关推荐

【Cadence】stb仿真和ac仿真——以一个简单的全差分反相放大器仿真为例

最近在补一些仿真方法学的问题,以及一些一直以来都有点模糊的概念,简单记录一下。搭建一个以两个CMOS反相器构成的全差分放大器(28nm工艺,PMOS和NMOS尺寸一致)激励的设置方便共模和差模仿真用同一个TB(这里有一个问题:这个放大器需要在开环下仿真还是闭环下?哪些放大器应用在开环,哪些闭环?这种应用场景不同会导致需要仿真得到开环还是闭环增益,或者环路增益?(我知道放大器在设计的时候肯定都是闭环应用的多,但是什么时候没必要闭环应用?光验证ac和stb仿真是否一样的话有必要有回路吗?

weixin_44951108的博客 5万+

设置STDIN_FILENO为非阻塞模式

Linux C:   #include #include #include #include int main(void) { char tmp[100]; memset(tmp,0,sizeof(tmp)); char str[] = "welcome to the linux world!"; int len = strlen(str); printf("len =

JoeBlackZQQ的专栏 3704

WGCNA分析中那些没人告诉你的坑:以肺结核差异基因模块筛选为例

本文深入探讨WGCNA分析在肺结核差异基因模块筛选中的七个关键陷阱,包括soft-thresholding选取、样本离群值检测、模块合并阈值调整等。通过实际案例和R代码示例,揭示生信数据挖掘中常被忽视的技术细节,帮助研究者避免常见错误,提升分析结果的可靠性和生物学意义。

weixin_29218509的博客 261

Linux阻塞和非阻塞读终端

阻塞和非阻塞 读常规文件是不会阻塞的,不管读多少字节,read一定会在有限的时间内返回。从终端设备或网络读则不一定,如果从终端输入的数据没有换行符,调用read读终端设备就会阻塞,如果网络上没有接收到数据包,调用read从网络读就会阻塞,至于会阻塞多长时间也是不确定的,如果一直没有数据到达就一直阻塞在那里。同样,写常规文件是不会阻塞的,而向终端设备或网络写则不一定。 现在明确一下阻塞(Block)这

u011135852的博客 3724

DL-FWI基础入门培训视频学习1、2

DL-FWI基础知识

shengMio的博客 709

verilog实现步进电机脉冲分配器(三相六拍)基于Nexys4DDR开发板

使用Verilog HDL设计的一个能够自启动、具有正反转功能的三相六拍步进电机脉冲分配器。已经写好Nexy4DDR的管脚约束文件 可以通过Nexys4DDR开发板的PMOD接口连接步进电机进行调试。 使用verilog语言 在vivado2018.2下运行编译下载都正确,(也可在ISE,QuartusII下使用)下面是工程截图: ...

QQ_778132974的博客 2590

Windows 下以非阻塞方式读取标准输入

转自:http://blog.codingnow.com/2006/08/nbstdin.html 最近遇到一个小问题,游戏的 client 在开发调试阶段需要接收控制台的输入指令。这个需求其实一直都有,只不过以前是自己写的控制台,那样反而好控制一些。使用 Windows 标准控制台也不是第一次,但是这个输入问题都没有好好的解决。这次又碰到这个问题,决定找个好点的解决方案。 读取标准输入的 C

hemeinvyiqiluoben的专栏 5678

【Python搞定车载自动化测试】——Python实现车载以太网DoIP刷写(含Python源码)

随着智能电动汽车行业的发展,汽车=智能终端+四个轮子,而人工智能也发展越来越快,Python语言使用越来越广,本章节主要介绍如何使用Python语言基于Pytest自动化框架来实现DoIP诊断自动化测试。首先回顾一下DoIP诊断基础知识:DoIP(Diagnosis over Internet Protocol)是一种用于车辆诊断的网络通信协议。它基于现代互联网技术,允许通过以太网或IP网络进行车辆诊断和通信。

测试领域技术分享 3794

Python实现向s3共享存储上传和下载文件

博客原文 安利一篇我翻译的国外大牛的神经网络入门文章 主要是使用boto模块 建立连接 import boto import boto.s3.connection from boto.s3.key import Key conn = boto.connect_s3( aws_access_key_id = 'xxxxxxx', a

Gary,Done的专栏 1万+

R语言做一个 GM (1,1)灰色预测模型

累加生成是GM(1,1)模型的另一个重要步骤,它通过构造累加生成序列,把非线性非平稳时间序列转化为线性平稳时间序列。GM(1,1)是一种基于灰色系统理论的预测模型,通常用于中小样本的非线性、非平稳时间序列数据分析。灰色预测模型的核心是灰度处理,将原始时间序列转化为灰色时间序列。这里使用R语言中的diff函数对时间序列进行一次差分,然后对结果取累加和得到灰度序列。以上是GM(1,1)灰色预测模型在R语言中的实现步骤。需要注意的是,GM(1,1)模型适用于中小样本的时间序列预测,对于长期预测效果可能较差。

Mrrunsen的博客 3841

数据分片的三种方式:哈希、一致性哈希、按照数据范围分片

数据分片就是按照一定的规则,将数据集划分成相互独立、正交的数据子集,然后将数据子集分布到不同的节点上。通过设计合理的数据分片规则,可将系统中的数据分布在不同的物理数据库中,达到提升应用系统数据处理速度的目的。三种常用的数据分片方式:1. 哈希分片2. 一致性哈希分片(Consistent Hash)3. 按照数据范围分片(Range Based)数据分片的应用场景:1. 数据库扩展2. 分布式缓存对集群部署多个缓存节点,提高缓存的处理能力。

wjianwei666的专栏 1133

Python图片处理库Wand的简单使用

博客原文 安利一篇我翻译的国外大牛的神经网络入门文章 ImageMagick安装 ubuntu下安装 sudo apt-get install libmagickwand-dev 其他系统安装方法可以参考 http://docs.wand-py.org/en/0.4.2/guide/install.html Wand安装 pip install Wand 简单使用

Gary,Done的专栏 1万+

java零基础从入门到精通(全)

目录前言1. 入门知识1.1 java体系1.2 JDK/JRE/JVM区别1.3 编译与运行理解1.4 类体函数细节2. 标识符 前言 java优势 健壮性(JVM(C++语言写的一个虚拟的计算机)、GC(垃圾回收机制)) 多线程并发 可移植性/跨平台 1. 入门知识 1.1 java体系 JavaSE:标准版 JavaEE:企业版 JavaME:微型版 1.2 JDK/JRE/JVM区别 JVM是不能独立安装的。 JRE和JDK都是可以独立安装的 层层嵌套,jvm包括jdk,jdk包括jre

码农研究僧的博客 6万+

使用百度推广API简介

博客原文 安利一篇我翻译的国外大牛的神经网络入门文章 最近公司使用了百度推广服务,为了筛选出合适的词条(每个词条进入百度推广的搜索都是收费的,显然提取一些”物美价廉”的词条是有必要的),需要对接百度推广的API,从搜索状态报告中提取有用的信息加以分析。 因为自己之前从未接触这方面的开发,因此遇到不少困难,今天终于从百度服务端获取到了数据,记录下来,算是一个印迹吧 :) 关于JSON

Gary,Done的专栏 6747

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

tensorflow教程中的mnist数据下载脚本

安利一篇我翻译的国外大牛的神经网络入门文章 阅读tensorflow教程过程中,最初的例子使用mnist,官方提供的下载脚本链接已经失效,从网上一直没有找到正确的input_data.py的脚本,查看官方教程,发现这个脚本在这里但是下载下来之后发现,运行过程会报错,因为通过pip安装的tensorflow包里是不包含这部分代码的,同时这个文件依赖也在pip安装的tensor版本里也是没有的。

Gary,Done的专栏 6664

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

tornado+celery的简单使用

celery是实现一个简单,灵活可靠的分布式任务队列系统的好选择 tornado则不用过多介绍 在开发机上安装rabbitmq这里就不介绍了 首先是task文件的编写 task.py#coding=utf-8 from celery import Celery from celery.bin import worker as celery_worker import celeryconfig

Gary,Done的专栏 6543

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

mysql-python安装时EnvironmentError: mysql_config not found

转自:http://www.cnblogs.com/xiazh/archive/2012/12/12/2814289.html 安利一篇我翻译的国外大牛的神经网络入门文章 在安装 mysql-python时,会出现: sh: mysql_config: not found Traceback (most recent call last): File "setup.py", line

Gary,Done的专栏 3535

tornado实现的简单异步调用的例子

tornado是python实现的一个异步web框架 除了写web服务实现web api供人调用之外,自己想写一个简单的http访问,于是有了下面的代码,尽供自己记录用,其实也可以用来平时写tornado代码简单进行功能调试使用参考 test.py#coding=utf-8 import tornado.ioloop from tornado import gen from tornado.ht

Gary,Done的专栏 3392

DynamoDB启动本地版本和python-sdk使用示例

博客原文 安利一篇我翻译的国外大牛的神经网络入门文章 本地DynamoDB的启动方法 从http://dynamodb-local.s3-website-us-west-2.amazonaws.com/dynamodb_local_2016-05-17.tar.gz下载DynamoDB的按照包,本地jre环境的配置请自行配置 # tar zxf dynamodb_local_201

Gary,Done的专栏 3298

一个zookeeper命令行工具——zoo_cmd

安利一篇我翻译的国外大牛的神经网络入门文章 最近在使用java的ZooInspector的时候,发现图形界面操作东西不太爽,于是用python开发了一个连接zookeeper的命令行工具,设计目标是尽量使人感觉就像操作本地文件系统一样的操作zookeeper里的节点,可以通过vi对节点内容直接编辑 项目地址:https://github.com/liujinliu/zoo_cmd 安装和

Gary,Done的专栏 3093

记python中json反序列化的一次问题解决

博客原文 安利一篇我翻译的国外大牛的神经网络入门文章 最新在tornado接收body为json数据时,进行json的反序列化时候遇到一个问题,输入如下: body='{\n\t"pts":[\n\t\t{\n\t\t\t"ddlSqls":"create table user1(ID Varchar(20) NOT NULL, name Varchar(20))",\n\t\t\t"

Gary,Done的专栏 2394

tornado的简单使用

功能描述实现一个类似与令牌桶的服务,包含一个定时任务,生成令牌,对外提供一个接口用于获取令牌,每获取一次,桶内令牌相应减少实现方案采用redis+tornado的方式实现,代码很简单,不过这里写这个主要是为了说明tornado的简单使用,同时介绍了一个tornado下的高效的redis异步库的使用目录和文件结构Makefile setup.py version.py .bumpversion.cfg

Gary,Done的专栏 1961

tornado下momoko的简单使用

最近在项目中实现一个server的时候采用了tornado,需要连接pg数据库,于是接触并使用了momoko,在这里做一些简单记录 model.py#coding=utf-8 from tornado import gen from tornado.gen import Return import momoko class TestMomoko(object): def __init__(

Gary,Done的专栏 1521

分享一个apns的项目

自己基于tornado和异步apns,异步amqp开发了一个简单的平台项目,可以轻松实现给ios设备发送通知,使用简单,已发到了自己的github上,希望大家多提宝贵意见,觉得好希望可以得到几颗星星 : )项目github地址https://github.com/liujinliu/apns_worker

Gary,Done的专栏 882

pip源配置

因为开发需要,有时需要在配置pip安装时使用国内源来加速,下面以配置华中科大pip源为例进行说明 修改pip配置文件,linux的在~/.pip/pip.conf,没有的话可以自行创建 内容如下:[global] index-url = http://pypi.mirrors.ustc.edu.cn/simple/ trusted-host = pypi.mirrors.ustc.edu.cn

Gary,Done的专栏 720

[护网杯 2018]easy_tornado

tornado 模板引擎的语法规定,双大括号 {{ …在 Tornado 模板中,handler 是一个内置的全局变量,它指向当前处理该 HTTP 请求的 RequestHandler 实例。在 Tornado 中,像 cookie_secret(用于 Cookie 加密签名的密钥)、debug 模式等全局配置,都是存放在这个 settings 字典里的。

2502_94318588的博客 205
上一篇: ubuntu安装jdk7/jdk8的两种方式
下一篇: mysql插入太多数据导致MySQL server has gone away
liujinliu001
博客等级 码龄12年 22粉丝 59原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值