5.打包涉及多进程、多线程、wmi处理方式

文章目录

  • 一、多进程
  • 二、生命周期维持
  • 二、nuitka打包win32com(wmi)
  • 三、windows7下多线程调用win32com(wmi)


一、多进程

多进程打包需要在入口位置加入一行代码,在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()

你可能感兴趣的:(Python打包,pyinstaller,python,多线程,多进程)