如何解决我的 Python RTD 服务器不工作,因为线程没有被初始化?
我正在使用这 Python implementation 台 RTD 服务器。
我收到一个错误:
pywintypes.com_error: (-2147221008,'CoInitialize has not been called.',None,None)
excel type-libe调用InvokeTypes(10,LCID,1,(24,0),(),)
时出现错误。
我从这个 question 中收集到,每次线程想要使用 COM 时,我都应该调用 CoInitialize()。现在我不知道为什么它没有在代码中实现。无论如何,我尝试将其添加到 Update 函数中,该函数启动一个计时器线程:
def Update(self):
# Get our wake-up thread ready...
pythoncom.CoUninitialize()
pythoncom.CoInitialize()
self.ticker = threading.Timer(self.INTERVAL,self.Update)
try:
# Check if any of our topics have new info to pass on
for topic in self.topics.values():
topic.Update(self)
if topic.HasChanged():
refresh = True
if len(self.topics):
refresh = False
topic.Reset()
if refresh:
self.SignalExcel()
finally:
self.ticker.start() # Make sure we get to run again
uninitialize 是根据文档说的,import pythoncom 会单独进行第一次初始化。
也许我应该在代码的其他地方进行初始化?
我意识到问题的整个复杂性在这篇文章中没有解释,所以请提出问题。
公寓所在对象的规则稍微复杂一些。如果有问题的 COM 对象是 以 InProc DLL 以外的任何方式实现(例如,基于 LocalServer 或 RemoteServer EXE 对象),这个问题就没有实际意义了,因为对象在一个单独的进程中运行,因此不能 住在同一间公寓里。对于 DLL 实现的对象,单元由以下单元确定 创建对象的线程和对象实际支持的线程模型。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。