Python的logging模块
我们知道一个良好的系统,日志模块是必不可少的,Python的基础日志模块便是logging模块。
这一篇文章,我们从源码去看下logging模块的组成。
1. 开始最开始,我们用最短的代码体验一下logging的基本功能
12345678910In [30]: import loggingIn [31]: loger = logging.getLogger()In [32]: logging.ba
...
在MongoDB中实现类似MySQL时间DATE_FORMAT分组
我们在使用MySQL的时候 如果数据库存的是时间戳 但又想按照天等时间方式分组,这时候可以使用DATE_FORMAT函数进行格式化时间字符串。那么 在MongoDB中有类似的需求应该如何实现呢?
答案就是:aggregate聚合 官方文档在此aggregation
我们把SQL 与 Aggergation 对比下:
SQL Terms, Functions, and Co
...
Tornado中使用Websocket
Websocket在线测试工具
WebSocket – 维基百科,自由的百科全书
利用websocket实现推送
支持异步的一个库websockets
Python Web学习笔记之WebSocket 通信过程与实现
长轮询的方式:
使用Websocket方式:
Websocket方式同样支持客户端主动发送数据
连接可能因为许多你无法控制的原因而意外关闭。任何Web应用程序都应该能够很好地处
...
使用Redis实现一个简单的限流
有时候我们想对我们的服务进行某些请求访问限制,即控制流量。还有就是控制用户行为,避免垃圾请求。这个时候我们需要实现一个限流策略,来满足我们的需求。
下面我们实现一个简单的限流策略:系统要限定用户某个行为在指定的时间里只能允许发生N次。
实验环境
12python3.7redis==3.3.8
实现方式
使用zset数据结构,我们使用时间戳来当值,还有就是时间戳当score来进行值
...
使用Python的PIL库进行图片合成和在图片上写字
最近需要写一个需求 根据UI设计的海报模板进行批量合成海报,经过一番谷歌大法好,查找到了几个比较好的参考文章,将使用总结一下。
首先就是安装库
1pip install Pillow
具体使用和代码解释
12345678910111213141516171819202122232425262728293031323334from PIL import Image, ImageFont, Imag
...
Python中的协程锁
关于协程锁尽管asyncio库是使用单线程来实现协程的,但是它还是并发的,乱序执行的。可以说是单线程的调度系统,并且由于执行有延时或者I/O中断等因素,每个协程如果同步时,还是得使用一些同步对象来实现。
在asyncio库中定义了一个锁对象Lock,它一次只允许一个协程来访问共享的资源,如果多协程访问就会阻塞起来,也就是说如果一个协程没有释放这个锁,别的协程是没有办法访问共享的资源的。
遇到的一个
...
Asyncio中将同步函数改为异步调用
今天看小明大神的博客:深入理解asyncio(三) 里面有段将同步函数改为协程使用的代码。其中提到了run_in_executor,主要使用这个方法将同步变为异步。
我们先看下如何将一个同步函数变为异步的
12345678910111213141516In [35]: import timeIn [36]: import asyncioIn [37]: def a(): ...: t
...
Linux上使用wkhtmltopdf将网页转为pdf
一、需求将数据同步HTML模板生成PDF
二、wkhtmltopdfwkhtmltopdf 不是程序,而是 软件。能够安装在 linux 或者 windows 服务器上通过命令行将任意html页面转pdf。基本上样式是一样的,不会有很大的偏差。
wkhtmltopdf 官网地址: https://wkhtmltopdf.org/
wkhtmltopdf 命令手册:https://wkhtmltop
...
如何在__init__中设置能够await的类或实例属性
如何在构造函数或类体中定义一个具有等待的类?
例如下面的这个代码:
1234567891011121314import asyncio# some codeclass Foo(object): async def __init__(self, settings): self.settings = settings self.pool = await create_
...
理解Python协程:从yield/send到yield-from再到async/await
Python中的协程大概经历了如下三个阶段:
最初的生成器变形yield/send
引入@asyncio.coroutine和yield from
在最近的Python3.5版本中引入async/await关键字
一:生成器变形yield/send普通函数中如果出现了yield关键字,那么该函数就不再是普通函数,而是一个生成器。
123456789101112In [1]: def
...