分类 Python 下的文章

Python下datetime.strptime存在多线程冲突的Bug,需要加锁屏蔽

最近用Python写多线程程序的时候发现的这么一个问题,似乎由来已久,但官方一直没有处理,我的测试版本是Python 2.7.2

现象如下:

多线程下如果调用strptime函数,会触发异常:

AttributeError: _strptime

如果使用该函数需要加一个全局的互斥锁,比如threading.Lock

wxPython在Python2.6中的运行问题及解决方案

这里所说的wxPython运行问题是指,在xp及之后的操作系统中使用基于Python2.x的wxPython,会出现任何程序都无法正常运行的问题。

主要表现如下:

当鼠标指针移动到运行中的wxPython程序窗口中时,程序会出现错误提示,并直接退出,而无法正常运行!甚至wxPython的Demo程序也是一样。

这个问题在wxPython的说明文件中有提到,只是大家一般不太注意而已:

PYTHON 2.6 NOTE

If you are using Python 2.6 you may notice that your wxPython
applications on XP or Vista are not using the newer themed controls.
This happens because Windows is loading the old version of the common
controls DLL instead of the new version. In order to change this we
need to change the menifest resource embedded in the executable file.
To help you do this we've installed a script next to your python.exe
called update_manifest.py which you can run to replace the manifest
resource in both python.exe and pythonw.exe, however it may not be
able to update a python executable that is un use running some script
(including update_manifest) so you may need to create a copy of
python.exe and use the copy to run the script in order for it to be
successful.

上面的大意是:由于python.exe和pythonw.exe中的manifest设置使用的windows公共控件信息设置存在问题,在xp和vista系统中会现问题,需要python使用者手动更新其中的manifest设置!

安装wxPython之后,在python的主文件夹中会出现update_manifest.py的脚本,这是wxPython提供的用于更新manifest设置的脚本,运行之就可以了!

但是python脚本需要python.exe(或pythonw.exe支持),导致python处于运行状态而无法修改,这是windows的文件保护机制引起的,所以需要通过技巧绕过!

按照如下方法操作即可:

1.在python的主文件夹复制一份python.exe文件,比如复制并重命名为pythonc.exe

2.使用上面复制的文件(pythonc.exe)运行update_manifest.py脚本即可

如下:打开cmd,进入python的主目录,执行命令:pythonc update_manifest.py即可,按照提示操作

好了!以后再执行wxPython程序就没有问题了

(转)IE8引发VS2005/2008向导出错的解决方案

IE8引发VS2005/2008向导出错的解决方案

现象:
1.jpg

2.jpg

解决办法,这是Visual C++开发组给出的方案,经过测试有效

打开注册表编辑器(regedit)

在如下位置创建如下注册表项和键值:

选择“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones“
(如果该项中没有名为1000的项,就自己创建一个)
在1000中建一个DWORD键,如下:

名称:1207
数据类型:REG_DWOR
值:0x000000

一切OK了!^_^

截图:
3.png

python源码中使用中文注释

一个极小的问题。在python代码中,用了中文注释,不能被python解释器理解(python 2.6)。

解决方案是:

coding=gb2312

print 'ok' #中文注释没问题
或者:

-- coding: gb2312 --

print 'ok' #这样也行