计算机语言
文章平均质量分 79
Python, HTML, JavaScript
jinixin
这个作者很懒,什么都没留下…
展开
-
jQuery发送Ajax请求
Ajax用于浏览器与服务器通信而无需刷新整个页面,服务器将不再返回整个页面,而是返回少量数据,通过JavaScript DOM更新一部分节点。期间数据传输可采用xml,json等格式,Ajax最早用于谷歌的搜索提示。其实不刷新整个页面便可与服务器通信的方法有很多,比如Flash,Java applet,iframe等,但Ajax是目前最为常见的一种。我们可以使用JavaScript扩展对象XMLHttpRequest实现Ajax,对于这种方法在这里不做介绍,下面直接了解jQuery实现Ajax的几种原创 2018-04-23 01:21:16 · 126759 阅读 · 4 评论 -
「WSGI」WSGI概述
WSGI是什么? 为什么涉及部署时就会提到这个概念?WSGI的作用是什么?没了它,服务是不是照样没问题? 每当编写Python Web项目的时候, 这些问题就开始困扰我.经过一番阅读和讨论后, 想在此简单谈谈.在谈WSGI前, 我们需要先了解下CGI是什么.互联网初步开放于上世纪90年代, 一开始主要用于浏览资料之类的, 而对Web服务器的要求, 也就是接收用户请求, 并返回(响应)存储在其上的静态文件. 在此过程中, Web服务器主要负责编解HTTP请求. 但随着互联网原创 2018-12-03 15:35:41 · 1773 阅读 · 0 评论 -
「消息队列」Python使用pika的优化: 多消费者复用一个连接
通过消息队列可以非常方便的实现分布式, 上篇文章使用Python的pika搭建的"生产者-消费者"模型就是很好的例子,但经过一段时间的运行, 有两个问题令我疑惑, 下面拿出来简单谈谈.问题一: 运行一段时间后, pika会丢失与RabbitMQ的连接.问题二: 连接建立过多, 资源消耗较严重.AMQP协议规定消息队列有心跳检测机制, 即消息队列的消息代理会设置一个心跳超时时间.当客户端与消息队列的消息代理建立连接后, 客户端隔一定时间就会发送一个心跳检测包, 如果消息代理原创 2018-11-18 21:46:12 · 9884 阅读 · 4 评论 -
「消息队列」Python使用pika操作RabbitMQ
前面几篇文章分别介绍了消息队列, AMQP协议以及RabbitMQ, 本篇文章开始尝试用具体语言操作RabbitMQ来搭建"生产者-消费者"模型. 本篇文章将使用Python语言, 而Python操作RabbitMQ库有很多, 比如pika, amqp以及Celery等, 下面就使用pika库来完成这个任务.调用方法和参数的含义大多已通过注释给出. 针对消费者的实现, 我提供了两种方式: MQReceiver1通过回调来处理消息, MQReceiver2通过迭代来处理消息. 当Rab原创 2018-11-18 21:46:22 · 3480 阅读 · 1 评论 -
「信号机制」应用—程序hang住怎么办
想必大家在工作中可能遇到过这样的问题,调试和执行程序都没有问题,但在运行一段时间后,程序莫名阻塞在某处。发生这种问题,第一反应就是头疼,茫茫码海,该如何去定位问题呢?这时我会想通过增加日志寻找在哪处进入无限循环或是hang住了,但除非一次性加入很多日志,否则无法准确定位问题点。而一次无法定位,我只好等到第二次hang住后,针对日志反馈再继续对可疑区域增加记录,如此往复。结果服务可靠性没有了保证,而且整个人也十分受挫。那有没有什么办法可以一下子就找到问题在哪?不打那么多没用的日志,不用使服务多次停原创 2018-05-20 20:42:43 · 2196 阅读 · 0 评论 -
Python traceback模块
Python的traceback模块用于从程序运行的堆栈中提取,格式化或打印程序目前执行的上下文信息。初看该模块就觉得该模块的方法普遍存在两种形式,比如extract_tb(tb)与extract_stack(f),这两个方法看上去功能就是一样的,只是一个接收tb参数,一个接收f参数。那么问题来了,这两个参数分别是什么呢?1)tb:traceback对象调用sys.exec_info()返回值是个三元组(exc_type, exc_value, exc_traceback)。其中exec_ty原创 2018-05-21 01:06:07 · 4552 阅读 · 0 评论 -
「信号机制」Python信号处理—signal模块
本文介绍Python语言中负责信号处理的signal模块,并会给出一些小demo.signal模块该模块提供Python中信号处理的机制,下面是几个常用的方法1. signal.signal(signalnum, handler)注册signalnum信号量的处理函数为handler其中signalnum为待注册的信号量,handler为该信号量的处理器,其是一个可调用对象,该对象必须接受两个参数,分别是信号量signum,当前程序运行堆栈frame,这两个参数Python解释器会自动传原创 2018-05-20 20:30:02 · 15797 阅读 · 0 评论 -
「Python」Queue模块
Queue模块,顾名思义其实现了各种队列,比如Queue,LifoQueue与PriorityQueue。一开始我没有过多注意到该模块,随着学习深入,多线程编程越来越普遍,常常需要共享数据,而数据在共享时一旦涉及修改,就需要加锁来确保某个时刻仅有一个线程可以修改数据。由于Queue模块是线程安全的,故数据可以通过其来实现共享,比起使用锁和信号量着实方便不少。原创 2018-05-03 02:49:12 · 551 阅读 · 0 评论 -
Python函数注解
函数注解是3.0版本引入的新特性,支持对函数的参数与返回值增加注释。注释可用于记录帮助信息,也可以用于标注类型。除了可以使用__annotations__属性获取外,注释没有其他附加语义。而将强制控制权交给框架,元类与装饰器,而Python则在一旁静观其变。定义1)参数注解变量名 [: 注释] [= 默认值]严格按照先注释后默认值的顺序,且两者都是可选的。注释和默认值都必须是Python表达式,在...原创 2018-03-10 18:46:13 · 6380 阅读 · 0 评论 -
Python强制关键字参数
强制关键字参数是3.1版本引入的新特性,目的是在可变长度的位置参数或关键字参数后增加常规参数(可选填默认值),给其赋值必须强制通过关键字传入。强制关键字参数不同于关键字参数。1)下面的参数列表在Python2中不被允许,但现在a是一个强制关键字参数,给a赋值必须强制给出"a=xx">>> def foo(*args, a):... print(args, a)foo(1,2,...原创 2018-03-10 18:41:26 · 3744 阅读 · 0 评论 -
PIL去除写入字体的轮廓
通过之前的一篇博客,简单介绍了Python使用PIL库制作透明背景图,并写上一行文字的方法。但随后发现生成的字体有着深色轮廓,如果将该图片附在淡色背景图上会显得十分格格不入。有没有办法将这些深色轮廓去除呢?答案是肯定的,图中的文字也是由像素构成,可以考虑将那些深色像素替换成字体颜色。先用image.split方法将RGBA图像分成R、G、B、A四个单通道图像;接着使用image.point方法对R通道图像的每个像素都设成字体颜色的R值,并对G通道图像与B通道图像做同样处理,对掌管透明度的A通道图像不作处理原创 2018-02-04 15:00:58 · 1998 阅读 · 0 评论 -
Python生成透明背景图片
关于画图,Python不乏许多优秀的第三方库能支持操作图片,比如Matplotlib、Pillow等。这些库可以对给定图片做各种各样的修饰,甚至是直接创建新图片。今天我就尝试用Pillow来制作一张透明背景的图片,并在图片上写一句话。在画图过程中,我主要使用了Pillow的Image、ImageDraw、ImageFont三个模块,下面对它们简单介绍:Image:构建一个image对象,你可以通过new或是从现有文件中加载来创建它ImageDraw:为image对象提供简单的平面图形。我把它理解成原创 2018-01-20 19:21:27 · 25971 阅读 · 1 评论 -
Python流式下载文件
之前写了使用WebUploader上传大文件的文章,既然有上传文件的需求,下载文件也是免不了的。在此使用Flask举例,为了便于移植,不使用Flask框架集成的send_file方法。在响应中指定了内容类型为字节流,浏览器收到后便会直接下载内容。虽然上面的代码可以顺利下载,但是如果文件很大,直接打开文件读取内容会大幅占用内存,影响服务器性能。所以最好能流式返回,一点一点读取文件内容。提到流式,在Python中我想到了迭代器和yield关键字。运行时,打开活动监视器,未出现大幅占用内存的情况。原创 2018-01-13 21:08:49 · 14901 阅读 · 0 评论 -
解决matplotlib中文乱码问题
matplotlib是知名的Python绘图库,但其在中文的支持上却不尽如人意,下面提供一种解决中文图例乱码的方法。第一步:安装matplotlib后,在Python环境下执行...;第二步:参照上面的路径将任一字体文件复制到...;第三步:参照上面路径,编辑文件,将“font.family”修改为“SimHei”;第四步:将本机 “家目录/.matplotlib/”下的所有“xx.cache”文件都删除。个人建议还可以考虑使用前端绘图库来避开matplotlib这个坑且具有更好的交互性,比如“EChar原创 2017-09-03 01:51:22 · 1006 阅读 · 0 评论 -
Python实现大文件分片上传
想借着这篇文章简要谈谈WebUploader大文件上传与Python结合的实现。WebUploader是百度团队对大文件上传的前端实现,而后端需要根据不同的语言自己实现。这里我采用Python语言的Flask框架搭建后端,配合使用Bootstrap前端框架渲染上传进度条。http协议并不是非常适合上传大文件,所以要考虑分片,即把大文件分割后再上传,而WebUploader所做的事,正是将一个大文件分片,一部分一部分的上传到服务器。WebUploader是一个前端框架,所以接收文件的部分需要我们自己实现,原创 2017-08-25 00:37:11 · 26123 阅读 · 4 评论 -
Python上下文管理—with语句的用法
在我阅读Python核心编程有关with语句的部分时,我没有弄懂到底讲了什么?with语句能带来什么好处?后来对它的理解逐渐清晰了起来,所以本文便想谈一谈我对with语句现在的理解,本篇文章之后还会再次更新。我先介绍with的概念,然后谈一下与其相关的两个方法,最后抛出一个例子。可以结合例子回过头来看这些概念,希望对大家有所帮助。我把with语句理解为对try,except和finally的一种封装。使用with语句可以让程序结构看似更简单,避免代码重复,更加pythonic。with语句仅能工作于支持原创 2017-05-21 01:12:07 · 1781 阅读 · 0 评论 -
Python浅拷贝与深拷贝
从字面意思理解,拷贝即复制当前的对象。但是只有在容器对象(列表,元组,字典)才有拷贝这一概念,原子对象(数字,字符串)没有拷贝这一说。普通的复制都是浅拷贝。浅拷贝可以理解为A容器拷贝产生的B容器虽然是新的,但B容器里的内容仍是旧的,其只是简简单单的复制了A容器里内容的引用,并没在B容器里创建真正的对象。而当我们修改B容器里的内容时,会产生两种结果:不可变对象会构建新的对象,其的id发生改变;而可变对象会根据引用去修改,结果其的改变会影响A容器里对应部分也发生改变。为了使容器中可变对象的修改互不影响,得原创 2017-05-18 16:15:29 · 688 阅读 · 0 评论 -
Python可迭代对象,迭代器,生成器的区别
本篇文章简单谈谈Python中可迭代对象,迭代器和生成器之间的关系。刚开始我认为这两者是等同的,但后来发现并不是这样;直接抛出结论:可迭代对象包含迭代器。如果一个对象拥有__iter__方法,其是可迭代对象;如果一个对象拥有next方法,其是迭代器。定义可迭代对象,必须实现__iter__方法;定义迭代器,必须实现__iter__和next方法。生成器是一种特殊的迭代器,生成器自动实现了“迭代器协议”(即__iter__和next方法),不需要手动实现两方法。生成器在迭代的过程中可以改变当前迭代值原创 2017-05-16 12:39:57 · 34888 阅读 · 17 评论 -
Python正则表达式匹配反斜杠“\”
在学习Python正则式的过程中,有一个问题一直困扰我,如何去匹配一个反斜杠(即“\”)?在学习了Python特殊字符和原始字符串之后,我觉得答案应该是这样的:1)普通字符串:'\\';2)原始字符串:r'\';但事实上在提取诸如“3\8”反斜杠之前的数字时,我屡次碰壁,始终得不到结果。最终发现自己理解错了,原来原始字符串和“正则转义”没有一点关系;下面详细谈一谈。正则表达式字符串需要经过两次转义,这两次分别是上面的“字符串转义”和“正则转义”,个人认为“字符串转义”一定先于“正则转义”。原创 2017-02-24 00:52:10 · 31749 阅读 · 4 评论 -
Python爬虫
技术还是很弱,我并不知道该从何写起?因为学习过程中常常会推翻自己以前的结论(也就是打脸),我不能说现在想的一定是正确的,仅仅只能简述我现在的理解。如果有不恰当的地方,还望包容和指出,感谢爬虫可以快速的自动获取数据,我觉得它主要可以分为两个部分:获取与分析获取数据有很多方法,可以通过urllib2库等,下面介绍两种简单的1. requests库原创 2017-01-12 19:37:37 · 2017 阅读 · 0 评论