Python2 to Python3

最近在做Python2到Python3的迁移,遇到了一些问题记录一下。

官方给出了一个迁移到Python3的参考文档,基本上主要步骤如下:

评估要支持的Python版本,主要是只支持Python3,还是要兼容Python2.7

了解Python3和Python2的差异

http://python-future.org/compatible_idioms.html

http://python3porting.com/problems.html

评估能利用的第三方工具,比如2to3, six等

确保有足够的测试(单元测试和功能测试)来确保改动不影响功能

我......

Multiprocess Pickle Error

最近在把一个项目迁移到Python3,对于multiprocess这一部分一直有一个Pickle Error困扰了我一天多的时间,这里记录一下。

因为用到了多进程,进程间的通信用的是JoinableQueue,而加入队列的对象是能够pickle的才行。 程序在Python2下是没问题的,迁移到Python3之后的错误信息是:

typeerror cannot serialize '_io.textiowrapper' object

Google结果能找到一些类似的错误:

https://stackoverflow.com/questions/5222......

Python Logging的一点思考

最近在项目中重构Python Logging相关的逻辑。为什么要重构?

大量重复代码,为每个Logger设置handler, formatter, logLevel等

将logger设置为类的成员变量,因为没法序列化,又手动在__getstate__里面将logger删掉,然后在__setstate__里面重新setup

# loggers can't be pickled due to the lock object, remove them before we try to pickle anything.

def __getstate__(self):

......