Python Zipfile 巨大压缩包 large file

最近用zipfile 挺多,主要因为这是官方的包,必须的好好用不是。今天在解压缩时想到如果是很大的压缩包那我的小服务器内存不久爆了,查了好久,居然搜索不到什么好的办法,最好的一个也就是用zipinfo来seek相应的大小,根据经验马上就相信了。随着不断的浏览zipinfo的代码,呆住了,不断看到shutil,然后发现这是个高级的文件io库,再然后发现这个库已经非常高效了,默认就解决了解压缩的内存占用问题,换句话说担心是多余多余多余的。还是缺少对开源的意识。所以不管用extract还是extractall都是高效的,大文件也没关系。

Mac更新快捷键(复制Ctrl C、粘贴Ctrl V、剪切Ctrl X)

一直都是双屏工作,用Synergy来共用键鼠。大部分快捷键还能区分开使用,就是复制粘贴老是弄混,很久了都不行,懒人能不改就不改呗。查了好多资料,发现最佳的办法就是在现有快捷键的基础上增加win下的习惯,比如拷贝和粘贴,但是老外的Copy和Past不适用,浏览到苹果的帮助文档发现黑色字后豁然开朗,原来中文osx下快捷键的命名也会变成中文,哎还是中文惹的祸。mac下的快捷键比较有意思,它是跟菜单里的命名挂钩的,这种方式比win下注册表啥的人性化很多很多,至少没有门槛。下面截图就是目前我修改的几个快捷键,这里注意下:拷贝和复制其实是一个意思,但是系统默认使用的是拷贝而像chrom等很多用的是复制,所[……]

Read more

docker配置wordpress总结

php-fpm官方镜像已经非常简洁了,这时候需要修改一点点配置比如上传文件的大小,可以写在php.ini中如下

upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 300

然后在Dockerfile中COPY到目录/usr/local/etc/php/就会覆盖当前的系统配置。

然后一些系统扩展也是必须的,下面添加在Dockerfile中

RUN apt-get update && apt-get install -y libpng12[......]

Read more

Pygame的渲染,当无显示器(headless)时的设置

pygame真是好用的东西,速度不慢,虽然我并没有像它名字里那样用在game上,但是一些小的图片化渲染它也一点不显得大,而且兼容问题解决的好好的,目前为止所有需求都用的它,而没有去动opengl,真是太好了。它默认支持无显示器的,只要别去调用display就行,其实大部分需求用surface都可以解决,真的需要设置SDL_VIDEODRIVER为dummy即可。

本来pygame用的挺好的,最近一个软件在server上跑时需要video driver,这时配置了Xvfb作为虚拟的外设,结果导致pygame生成的图全部变黑了,单独设置了SDL_VIDEODRIVER为Dummy也不行,推测[……]

Read more

Dockerfile ADD和COPY的区别

COPY的作用跟预想的差不多,就是拷贝到目标中,而ADD比较魔法一点,支持URL这类的获取,并且它能更好的支持docker的cache,当我修改了数处copy为add后build速度就嗖嗖的了。

今天碰到一个特殊的地方,pip安装一个本地的包,当这个包是add进来的时会失败而copy没有这个问题。

Python 性能优化指导(加速器和一些小技巧)

  1. 使用测量工具,量化性能才能改进性能,常用的timeit和memory_profiler,此外还有profile、cProfile、hotshot等,memory_profiler用了psutil,所以不能跟踪cpython的扩展;
  2. 用C来解决费时的处理,c是效率的代名词,也是python用来解决效率问题的主要途径,甚至有时候我都觉得python是c的完美搭档。常用的是Cython,直接把py代码c化然后又能像使用py包一样使用,其次是ctypes,效率最最高的存在,最后还有CPython和cffi都是屌屌的存在;
  3. 优化算法,所有语言通病,算法的提升我觉得是在所有提升之上的,[……]

Read more

Python中使用自定义类class作为海量数据结构时内存占用巨大的问题

最近碰到处理一个二十多兆的文件时内存蹭蹭的吃掉四百多兆,吓死宝宝了。

无奈毕竟接触python时间有限,还没有完整的看过python的一些基础知识,我想一个合格的pythoner应该不会碰到这个问题。当然像我这样的操作党碰到的问题映像也更深一点。最郁闷的是网上讨论这个的很有限,google的结果也是三天才找到相应的说明,我想这里很重要的一点是海量数据在存储和很低层的操作时并不会使用python,嵌入一个c片段即可。好吧这招我还不会,而且在用的库要改也是件痛苦的事,为了让项目尽早上线有个折中的方案顶上即可。在无尽的排查后发现,原来python这个东东为了让大家写的爽,在性能上事丢的不要不要[……]

Read more

Celery在Flask的初始化中的问题

Flask的初始化有好多种,像工厂、单例都是不错的,我使用的是声明+init的方式,比如celery会是这样:

base.py中:celery = Celery()

__init__.py中在create__app()方法中会将base中的组件逐个init初始化。

大部分flask的组件都支持这种初始化的方式,因为python是解释型语言所以在使用不支持这种的组件如celery会有问题,比如像上面那样初始化后celery无法正确设置broker哪怕重新用celery.update_config(xxx)也没有用,其他参数似乎可以生效的。后来找到了celery-flask-he[……]

Read more

关闭/开启 ubuntu 自动更新提示

发现vps登陆后只有apt update后才知道有多少包需要更新不是很傻么,本地的ubuntu在登录时就有很好的提示,并且还能告知系统负载情况,很有用,这里就想开起来。首先这个提示的名字叫Motd

在ssh的配置文件/etc/ssh/sshd_config中修改PrintMotd为yes或者no来开启或者关闭。

blueImp/jQuery file upload 的正确用法(限制上传大小和文件类型)

这个插件太出名了,几乎能完成所有能想象的到的效果,包括进度条、拖拽、甚至现在已经完美支持图片视频等的处理,三个字形容就是屌爆了。最近在做上传这一部分,发现网上对于上传文件大小的限制和类型检测等的方法都不妥当,包括老外写的。blueimp提供了完整的解决方案,验证当然是有的,所以对于一个普通的上传组件来说需要下面三个组件:

<script src="//cdn.bootcss.com/blueimp-file-upload/9.12.5/js/jquery.fileupload.js"></script>
 <script src=&qu[......]

Read more