Python 2.7在调用自定义类函数时候报错"exceptions.TypeError: 'int' object is not callable"

Python 2.7中按照如下方式定义类

在执行脚本的时候会报告如下错误

造成错误的原因在于Python 2.7中当类的成员变量跟方法名重名的时候,默认是使用类的成员变量,而成员变量是无法被调用的,因而导致报错。

解决方法就是避免方法名跟成员变量同名即可,比如上面的定义修改成如下方式即可

Python 2.7使用multiprocessing报错PicklingError: Can't pickle : attribute lookup __builtin__.instancemethod failed

Python 2.7中使用下面代码的时候

会报告如下错误:

这种错误发生的原因是Python 2.7版本中的multiprocessing模块的进程池部分存在BUG,无法正常处理这种写法的代码,据说在Python 3.4版本之后解决了此问题。

目前测试来看,不用Python 2.7中的进程池,而是自己创建进程,自己管理进程的方式,可以比较简单的解决此类问题。

比如代码修改成如下样子,即可正常运行

至于多进程的管理,则只需要使用

引入multiprocessing模块的Queue,实现一个简单的生产者,消费者模型即可。

参考链接


python multiprocessing遇到Can’t pickle instancemethod问题

WARNING:libav.swscaler:Warning: data is not aligned! This can lead to a speedloss

Python中使用libav视频解码的时候,如果需要更改最后输出的视频的宽高,比如如下代码:

可能会收到一条警告信息

导致警告的原因是swscaler的缩放的目标尺寸不合适,它预期的大小是16的倍数,这个倍数可以保证swscaler以最高效的方式进行图片的缩放处理。

解决警告的方式就是保证宽高都是16的倍数即可。

参考链接


[swscaler] Warning: data is not aligned! This can lead to a speedloss 的解决方法【FFmpeg】

Ubuntu 16.04 LTS根据进程名结束所有同名进程

最近在调试脚本时,偶尔会由于脚本错误,出现一批的进程没有结束的情况. 手工结束进程,太浪费时间,因此找到一个可以批量结束同名进程的脚本命令,如下:

参考链接


Linux Shell脚本实现根据进程名杀死进程

PHP版本判断之version_compare()函数

判断当前PHP的版本是否高于某个版本,或者低于某个版本的方法是使用version_compare()函数。

参考链接


PHP 版本判断 version_compare() 函数

Ubuntu 16.04 LTS通过SSH2更新WordPress及其插件

最近服务器升级到了Ubuntu 16.04 LTS,结果遇到了与Ubuntu 12.04通过SFTP更新 WordPress相似的问题,界面中没有出现SSH的选项,只不过目前(2017.06.04)最新版本的WordPress(4.7.5)一直提示的是"无法连接到服务器",原因依旧是缺少PHPSSH支持库,总结一下解决方法如下:

如果更新或者删除插件的时候提示 "未能找到WordPress插件目录",则参照
Ubuntu 14.04系统WordPress 4.5升级到PHP7之后执行插件升级报错“无法定位WordPress内容目录(wp-content)”中的方法修改即可。

目前(2017.06.09)依然存在的问题是更新插件的时候,提示拷贝出错。查看系统日志

可以看到如下错误信息

这个问题属于php-ssh2自身的BUG导致的,问题已经确认并修复,但是还没合并到Ubuntu 16.04 LTS所属的分支上。

目前的解决方法是单独安装Ubuntu 17.04系统上已经编译好的对应系统的deb包,然后手工安装更新。

详细的版本信息可以从Ubuntu php-ssh2 package查询各个系统版本上的关于php-ssh2的包信息。

比如本服务器上更新的命令示例如下:

如果外网访问不畅通,也可以从本站下载,示例脚本如下:

参考链接


Ubuntu 16.04下Python打印正在运行的进程的栈信息

Python程序在运行时候,可能由于某些原因导致进程卡住在某行代码上,此时我们需要输出进程中各个线程的栈信息。
此时我们需要使用Python栈工具pstack的协助,项目的工程地址https://github.com/wooparadog/pstack/

具体的用法如下: