Python win32com.client.Dispatch+;Cherrypy=尚未调用CoInitialize

Python win32com.client.Dispatch+;Cherrypy=尚未调用CoInitialize,python,python-3.x,cherrypy,win32com,Python,Python 3.x,Cherrypy,Win32com,下面的代码运行良好,但如果从CherryPy应用程序方法执行时出现错误消息CoInitialize未被调用,则会失败: import win32com.client xl = win32com.client.Dispatch("Excel.Application") xl.quit() 建议一个适合我的解决方案: import pythoncom pythoncom.CoInitialize() 我之所以要问一个我已经有了解决方案的问题,是因为(1)我想知道我在做什么(而不是仅仅因为我看到它

下面的代码运行良好,但如果从CherryPy应用程序方法执行时出现错误消息
CoInitialize未被调用
,则会失败:

import win32com.client
xl = win32com.client.Dispatch("Excel.Application")
xl.quit()
建议一个适合我的解决方案:

import pythoncom
pythoncom.CoInitialize()
我之所以要问一个我已经有了解决方案的问题,是因为(1)我想知道我在做什么(而不是仅仅因为我看到它工作过一次)和(2)我不想冒险错过一些重要的东西(阅读让我觉得我错过了一些东西)

我找不到任何关于
pythoncom.CoInitialize()
的文档,pythoncom的源代码是以下三行代码,它们对我没有帮助(Eclipse+pydev也没有说明该方法不存在):


我记不清去年我没有使用COM,但我想你必须在使用它的每个线程中初始化COM(同样,我也不确定每个COM分区)。由于CherryPy是线程化服务器,您的请求由不同的线程处理,而不是由您引导的线程处理。因此,我建议您在引导例程中尝试以下操作:

import pythoncom


def onThreadStart(threadIndex):
  pythoncom.CoInitialize()

cherrypy.engine.subscribe('start_thread', onThreadStart)

有关CoInitialize和其他COM函数的文档,请参见MSDN
import pythoncom


def onThreadStart(threadIndex):
  pythoncom.CoInitialize()

cherrypy.engine.subscribe('start_thread', onThreadStart)