tornado学习笔记day04
响应输出 -> write原型self.write()函数源码中是这样定义的
1def write(self, chunk: Union[str, bytes, dict]) -> None:
作用将chunk数据写到缓冲区
刷新缓冲区的四种方式
程序中断
手动刷新
缓冲区满了
遇到\n
当你写了一个print之后,不是直接就显示在黑屏中断上面的,而是先到缓冲区走一个趟
只是我们python演示不了,这个得用C语言来演示,还得是Linux系统才行,两种条件都不具备
C程序演示这里我们需要gcc或者g++(编译C++的)
12345678# include<stdio.h>int main(){ while(1){ printf("hello"); sleep(0.05); } return 0;}
基础代码演示
123456789101112131415class WriteHandler(RequestHandler): def get(self) ...
tornado学习笔记day05
模板配置模板路径这个在之前我们已经配置好了,可以参考前面的文章
1234settings = { # 就像upfile就没有,你写了也白扯 'template_path': os.path.join(BASE_DIR, "templates"),}
渲染并返回给客户端使用render()方法
123class HomeIndexHandler(RequestHandler): def get(self): self.render("home.html")
变量与表达式语法
{ { var } }
{ { expression } }实例123456class HomeIndexHandler(RequestHandler): def get(self): temp = 100 # 直接传一个变量就行 self.render("home.html",num = temp) # self.rende ...
tornado学习笔记day02
整理基础工程
请看第一天的配置文件目录,搭建了一个框架的基础目录Applicationsettingsdebug作用可以设置tornado是否工作在调试模式下面,默认为false,即工作在生产模式下true的特性:自动重启:
tornado程序会监控源代码文件,会自动重启服务器,减少我们手动重启的次数,提高开发效率
如果保存后有错误,导致重启失败,修改好后,不会再重启了,需要我们手动进行重新启动
在debug开启后,那四个特性咱也不太会啊,咱就想着能够重启就得了,那这可咋整,这个时候我们可以通过"autoreload" : True设置,仅仅有第一个特性取消缓存编译的模板:
单独设置:compiled_template_cache = False
,这个默认值为true,这里要注意不是说我debug设置默认为啥,里面就默认都是啥
你改完了模板的内容,它得加载你改了的啊,不能还用缓存的内容,要不然你看不到修改的新结果,这可不行
虽然出于性能考虑,老也重新加载有点儿慢,但是没事儿,毕竟开发中也不差这一点资源取消缓存静态文件的HASH值
单独设置:static_hash_ ...
2019 Python 面试 100 问
zone
2019年06月09日
阅读 3019
关注
2019 Python 面试 100 问
以下内容出自小程序「编程面试题库」,本文首发于公众号「zone7」
0 遇到过得反爬虫策略以及解决方法?
1.通过headers反爬虫
2.基于用户行为的发爬虫:(同一IP短时间内访问的频率)
3.动态网页反爬虫(通过ajax请求数据,或者通过JavaScript生成)
4.对部分数据进行加密处理的(数据是乱码)
解决方法:
对于基本网页的抓取可以自定义headers,添加headers的数据
使用多个代理ip进行抓取或者设置抓取的频率降低一些,
动态网页的可以使用sele ...
Python常见的170道面试题全解析答案
语言特性1. 谈谈对 Python 和其他语言的区别答:Python 是一门语法简洁优美,功能强大无比,应用领域非常广泛,具有强大完备的第三方库,他是一门强类型的可移植、可扩展,可嵌入的解释型编程语言,属于动态语言。
拿 C 语言和 Python 比: Python 的第三方类库比较齐全并且使用简洁,很少代码就能实现一些功能,如果用 C 去实现相同的功能可能就比较复杂。但是对于速度来说 Python 的运行速度相较于 C 就比较慢了。所以有利的同时也有弊端,毕竟我们的学习成本降低了。
2. 简述解释型和编译型编程语言答:解释型语言是在运行程序的时候才翻译,每执行一次,要翻译一次,效率较低。 编译型就是直接编译成机型可以执行的,只翻译一次,所以效率相对来说较高。
3. Python 的解释器种类以及相关特点?答:
CPython c 语言开发的,使用最广的解释器IPython 基于 cPython 之上的一个交互式计时器,交互方式增强功能和 cPython 一样PyPy 目标是执行效率,采用 JIT 技术。对 Python 代码进行动态编译,提高执行效率JPython 运 ...
python高级编程技巧
如何在列表,字典,集合中根据条件筛选数据方法1:通过迭代来进行判断筛选
解决方案函数式编程:
如何统计序列中元素的出现频度解决方案:使用collections.Counter对象
将序列传入Counter的构造器,得到Counter对象是元素频度的字典Counter.most_common(n)方法得到频度最高的n个元素的列表
如何感觉字典中的值的大小,对字典中的项进行排序解决方案:使用内置函数sorted
利用zip将字典数据转换成为元组
传递sorted哈数的key参数
如何快速找到多个字典中的多个公共键(key)?利用集合(set)的交集操作step1:使用字典的viewkeys()方法,得到一个字典keys的集合step2:使用map函数,得到所有字典的keys的集合step3:使用reduce函数,取得所有字典的keys的集合的交集
如何让字典保持有序使用collections.OrderedDict以OrderedDict替代内置字典Dict,依次将选手的成绩存入OrderedDict
如何实现历史记录功能使用容量为n的队列存储历史记录使用标准库collections中 ...
(无头的浏览器)是什么鬼?
原文链接:https://www.jianshu.com/p/11d519e2d0cb
用Python驱动Headless Chrome
headless chrome.png
Headless Browser(无头的浏览器)是什么鬼?
简而言之,Headless Browser是没有图形用户界面(GUI)的web浏览器,通常是通过编程或命令行界面来控制的。
Headless Browser的许多用处之一是自动化可用性测试或测试浏览器交互。如果您正在尝试检查页面在不同的浏览器中呈现的方式,或者确认页面元素在用户启动某个工作流之后出现,那么使用Headless
Browser可以提供大量的帮助。除此之外,如果内容是动态呈现的(比如通过Javascript),web抓取等传统的面向web的任务就很难做了。使用Headless
Browser可以方便地访问这 ...
关于C10K问题详解
本文转自:https://www.jianshu.com/p/ba7fa25d3590
C10K问题由来
随着互联网的普及,应用的用户群体几何倍增长,此时服务器性能问题就出现。最初的服务器是基于进程/线程模型。新到来一个TCP连接,就需要分配一个进程。假如有C10K,就需要创建1W个进程,可想而知单机是无法承受的。那么如何突破单机性能是高性能网络编程必须要面对的问题,进而这些局限和问题就统称为C10K问题,最早是由Dan
Kegel进行归纳和总结的,并且他也系统的分析和提出解决方案。
C10K问题的本质
C10K问题的本质上是操作系统的问题。对于Web 1.0/2.0时代的操作系统,传统的同步阻塞I/O模型处理方式都是requests per
second。当创建的进程或线程多了,数据拷贝频繁(缓存I/O、内核将数据拷贝到用户进程空间、阻塞,进程/线程上下文切换消耗大, 导致操作系统崩溃,这就是C10K问题的本质。
可见, 解决C10K问题的关键就是尽可能减少这些CPU资源消耗。
C10K问题的解决方案
从网络编程技术的角度来说,主要思路:
每个连接 ...
关于curl的使用详解
本文转自:https://www.jianshu.com/p/f05bbd5007d9
curl 是一种命令行工具,作用是发出网络请求,然后获取数据,显示在"标准输出"(stdout)上面。它支持多种协议,下面列举其常用功能。
一、查看网页源码
直接在 curl 命令后加上网址,就可以看到网页源码。以网址 www.sina.com为例(选择该网址,主要因为它的网页代码较短)。
$ curl www.sina.com
<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr>&l ...
关于Epoll的使用详解
本文转自:https://www.jianshu.com/p/ee381d365a29
作者: 大呀大帝国 </br>
email:drnijq@126.com
1.Epoll简介
EPOLL 的API用来执行类似poll()的任务。能够用于检测在多个文件描述符中任何IO可用的情况。Epoll API可以用于边缘触发(edge-triggered)和水平触发(level-triggered),
同时epoll可以检测更多的文件描述符。以下的系统调用函数提供了创建和管理epoll实例:
epoll_create() 可以创建一个epoll实例并返回相应的文件描述符(epoll_create1() 扩展了epoll_create() 的功能)。
注册相关的文件描述符使用epoll_ctl()
epoll_wait() 可以用于等待IO事件。如果当前没有可用的事件,这个函数会阻塞调用线程。
边缘触发(edge-triggered 简称ET)和水平触发(level-triggered 简称LT):
epoll ...