一、多进程
多进程打包需要在入口位置加入一行代码,在pyinstaller打包才能够有效打包。nuitka不需要。
from multiprocessing import freeze_support
freeze_support()
二、生命周期维持
不论多进程还是多线程,建议采用生命周期维持方法,不然可能出现运行异常情况。生命周期维持其实就是保证当前运行多线程、多进程的函数退出后,多线程(多进程)创建的变量被保存在上一层调用方法之中,以此类推。
二、nuitka打包win32com(wmi)
用到win32api的打包比较麻烦。在入口程序加入:
import wmi
nuitka打包让其他打包进来,把’win32api’下面语句中去除:
--recurse-all --recurse-not-to=win32api
三、windows7下多线程调用win32com(wmi)
在windows10 使用多线程调用win32com相关的功能,运行没有问题,回到家用windows7环境运行就报:
PyQt QBasicTimer::stop: Failed. Possibly trying to stop from a different thread
解决办法:在线程类中的run函数中开头和结尾加入以下信息:
def run(self):
pythoncom.CoInitialize()
try:
pass # 线程实际执行代码
excpt:
pass
#释放资源
pythoncom.CoUninitialize()