"可迭代对象"与"迭代器"
Python中迭代器指的是实现了__iter__协议与next()方法的对象,其中__iter__协议中返回对象自身(self),next()方法每次返回单一元素,直至所有元素遍历结束,抛出'StopIteration'异常结束。
可迭代对象是一种更宽泛的定义,只要对象实现了__iter__协议,返回一个迭代器(并不像迭代器一样必须返回自身self)用来遍历自己的元素集合,那这个对象就是可迭代的对象,也意味着可以直接通过for item in obj...的方式遍历。
iter(a) is iter(a)?
>>a = [1, 2, 3]
>>iter(a) is iter(a) #(1)
>>F
继续阅读 »
忽略所有 Web性能基准测试,包括这个
几个月前,有一篇名为 Async Python is Not Faster 的文章在社交媒体上广为流传。在这篇文章中,作者 Cal Paterson 指出,与普遍的看法相反,异步 web 框架不仅“不比传统的同步框架快” ,而且还更慢。他通过展示他实施的相当完整的基准测试的结果来支持这一点。
我希望一切都像作者在他的博客文章中所说的那样简单,但是事实是,衡量Web应用程序的性能异常复杂,并且他在实施基准和对结果的解释上都犯了一些错误。
在本文中,你可以看到我在理解和修复此基准,重新运行该基准以及最终得出令人震惊的发现所做的努力。
继续阅读 »
最近发现 airflow 任务执行顺序有些奇怪,于是看了下 airflow 关于权重的处理,解答了心中的疑问。
以最新的稳定版(v1.8-stable)为例,代码总共就这么一小段
python
@property
def priority_weight_total(self):
return sum([
t.priority_weight
for t in self.get_flat_relatives(upstream=False)
]) + self.priority_weight
继续阅读 »
在Scrapy框架下
more
蚂蜂窝
```Python
coding=utf-8
import json
from urlparse import urljoin
import re
import logging
import scrapy
from scrapy.http import Request
from scrapy.selector import Selector
from andaman.utils.html import html2text, parse_time
from andaman.items.qa import QAItem
from andaman.items.jieban import Ji
继续阅读 »
上段时间组内解决的一个奇葩内存泄露问题, 找到最终原因时发现真是奇坑无比的一个原因.
一开始怀疑某个逻辑会导致dict引用数一直增加, 或是其他对象始终不释放, 导致内存一直在涨, 期间开启gc collect也没用.
使用memory grapher 等内存泄露工具检测, 打印出一段时间对象的增长量, dict, list等数据结构的增长量, 从打印信息看虽然有一定问题, 但是确实不可能会导致那么严重的内存泄露, 我们某个游戏服有时甚至会突然从300MB进程内存, 很快就上涨到3GB.
继续阅读 »
最不喜欢在Tornado中使用任何同步阻塞型的东西,不想让ioloop阻塞在某个IO调用上,因为单线程的东西任何阻塞都是代价很高的,除非你的数据库被优化的性能很好,速度很快。除了之前的线程池之外,直接使用异步库也是不错的选择,Motor就是Tornado里可以用的很好的异步库,它兼容Tornado的gen.coroutine式的异步调用形式,主要使用了greenlet来巧妙的封装PyMongo的同步API, 把底层的socketIO进行了异步化的处理,化同步为异步。
从使用的例子来分析Motor是如何把PyMongo的API异步化的:
client = motor.MotorClient(...)
db = client['te
继续阅读 »
物理主机为 windows 8.1,虚拟机 VirtualBox,里面装的 ubuntu。
windows 建立 ftp server
在 cmd 中输入以下命令,在当前目录建立 FTP 服务,需要先安装 python 及 pyftpdlib 模块(使用Python创建简单的HTTP和FTP服务)。
继续阅读 »
预备工作
(最好自带翻墙梯子) python工具包利器: Anaconda3(因为win下只出了python3.5版本的), 清华大学conda源 , 清华大学pipy源 , Pypi官方源 ,Conda官方源(其中一个发布源) ,最重要的就是Google了。
当我们下载好了Anaconda后,你懂的,直接安装,最好是写入系统的path中(注意提示,不要直接一路回车过去)。 在Linux中更是如此,不要使用sudo权限,否则会写入sudo 的路径中,以后使用的时候诸多麻烦的。安装好anaconda后,你应该有了virtualenv这个工具了,这个工具是用来创建虚拟环境的(一个系统往往有很多人在用,大家对系统的要求都不一样,你
继续阅读 »
项目地址在 https://github.com/findneo/TKposts
人生活在社区里,对一个常使用微博的人来说,微博记录和反映了他在一段时间内所接触的信息,思考的问题和表达的观点,是值得研究的。如果这个研究对象是一个优秀的人,这里面的价值可能比想象要大。
很显然,要做成收集整理一个人所有的微博 这件事,首先是收集,其次是整理。
收集主要想到有三种方式:
找现成工具(无趣,暂不考虑)。
在https://m.weibo.cn/u/14015127xxx 页面一直按END 键,然后页面会不断异步发送请求以增加页面内容,直到全部内容都被获取。
可以看到第二种方法中的请求是向https://m.weibo.cn/ap
继续阅读 »
好久不写博客了,最近一直在忙一个私活,一个问卷类的项目,用 django 写的,说实话,之前除了在公司厘米用,都没有用过 python,还好我有一些好同事,有问题可以直接问,方便了很多。
为了避免长时间不写文章的尴尬,我急匆匆的新键了一个 md,开始写。
一般来说,本地运行 django 项目是很简单,
sh
python manage.py runserver
UWSGI
总感觉这个单词全部大写的话,很别扭,使用 uwsgi 启动项目的话也不是太难,
```ini
docon.ini
uwsgi abc.ini
uwsgi --reload /tmp/***.pid
uwsgi --stop /tmp/***.
继续阅读 »