Python多线程下调用win32com包相关问题:pywintypes.com_error: (-2147221008, ‘尚未调用 CoInitialize。‘, None, None)问题处理

简介: Python多线程下调用win32com包相关问题:pywintypes.com_error: (-2147221008, ‘尚未调用 CoInitialize。‘, None, None)问题处理

报错1:

pywintypes.com_error: (-2147221008, '尚未调用 CoInitialize。', None, None)


场景:

我是用 flask 服务操作接收的请求,通过 xlwings 库读取 excel。


问题原因:

多线程下使用 win32com 的话,前面必须调用 CoInitialize,而 xlwings 读取 excel 正好用到了 win32com。


解决方法:

导入 pythoncom 库,如果没有的话可以通过 pip install pywin32 安装。

然后线程前面加一句这个即可 pythoncom.CoInitialize()

import pythoncom
# 多线程
thread():
  # 这个必须有
  pythoncom.CoInitialize()
  # 其它代码
  ...
  # 这个可有可无
  pythoncom.CoUninitialize()

报错2:

pywintypes.com_error: (-2147417842, '应用程序调用一个已为另一线程整理的接口。', None, None)

如果创建 xlwings 对象的过程在外面,读取的过程在里面会报这个错。

问题代码示例:

import pythoncom
# 创建xlwings对象
app = xlwings.App(visible=False, add_book=False)
# flask下的路由
@app_flask.route('/get_data/<command>')
@cross_origin()
def get_data(command):
    pythoncom.CoInitialize()
  # 使用xlwings对象打开excel
    wt = app.books.open(path_xl_new1)
    # 其它代码
  ...
  pythoncom.CoUninitialize()

正确代码示例:

import pythoncom
# flask下的路由
@app_flask.route('/get_data/<command>')
@cross_origin()
def get_data(command):
    pythoncom.CoInitialize()
  # 创建xlwings对象也放在里面
  app = xlwings.App(visible=False, add_book=False)
  # 使用xlwings对象打开excel
    wt = app.books.open(path_xl_new1)
    # 其它代码
  ...
  pythoncom.CoUninitialize()

喜欢的点个赞❤吧!

目录
相关文章
|
2天前
|
安全 调度 Python
探索Python中的并发编程:协程与多线程的比较
本文将深入探讨Python中的并发编程技术,重点比较协程与多线程的特点和应用场景。通过对协程和多线程的原理解析,以及在实际项目中的应用案例分析,读者将能够更好地理解两种并发编程模型的异同,并在实践中选择合适的方案来提升Python程序的性能和效率。
|
3天前
|
Python
【Python操作基础】——包
【Python操作基础】——包
|
7天前
|
消息中间件 程序员 调度
Python并发编程:利用多线程提升程序性能
本文探讨了Python中的并发编程技术,重点介绍了如何利用多线程提升程序性能。通过分析多线程的原理和实现方式,以及线程间的通信和同步方法,读者可以了解如何在Python中编写高效的并发程序,提升程序的执行效率和响应速度。
|
8天前
|
Python
在Python中快捷引入缺失包的技巧和实践
在Python中快捷引入缺失包的技巧和实践
11 0
|
13天前
|
域名解析 JSON API
Python小工具包
【5月更文挑战第2天】构建了一个Python小工具包,包含获取IP、域名解析、JSON格式化和时间戳转换的函数。通过`get_ip_address`和`resolve_domain`实现网络任务,`format_json`用于美化JSON数据,`timestamp_to_datetime`转换时间戳。这些函数可提高开发效率,易于整合到项目中,展现Python的简洁和灵活性。
22 1
Python小工具包
|
15天前
|
网络协议 算法 网络架构
Python网络编程之udp编程、黏包以及解决方案、tcpserver
Python网络编程之udp编程、黏包以及解决方案、tcpserver
|
15天前
|
并行计算 安全 测试技术
Python多线程
【4月更文挑战第13天】对比多线程与多进程:多线程适合I/O密集型任务,轻量级但受GIL限制;多进程适用于CPU密集型任务,能实现真正并行。多线程直接共享内存,多进程独立内存,各有优劣。
9 0
|
15天前
|
数据采集 安全 Java
Python的多线程,守护线程,线程安全
Python的多线程,守护线程,线程安全
|
15天前
|
并行计算 数据处理 开发者
Python并发编程:解析异步IO与多线程
本文探讨了Python中的并发编程技术,着重比较了异步IO和多线程两种常见的并发模型。通过详细分析它们的特点、优劣势以及适用场景,帮助读者更好地理解并选择适合自己项目需求的并发编程方式。
|
16天前
|
调度 Python 容器
【python】-详解进程与线程
【python】-详解进程与线程