【发布时间】:2010-05-21 08:57:21
【问题描述】:
我将 Pylons 与 WMI 模块结合使用来对几台机器进行一些基本的系统监控,对于基于 POSIX 的系统来说,一切都很简单 - 对于 Windows - 没那么简单。
向 Pylons 服务器发出请求以获取当前 CPU,但它运行不佳,或者至少与 WMI 模块一起运行。首先我只是做了(某事)这个:
c = wmi.WMI()
for cpu in c.Win32_Processor():
value = cpu.LoadPercentage
但是,当我通过 Pylons (GET http://ip:port/cpu) 访问这个模块时,这给了我一个错误:
raise x_wmi_uninitialised_thread ("WMI returned a syntax error: you're probably running inside a thread without first calling pythoncom.CoInitialize[Ex]")
x_wmi_uninitialised_thread: <x_wmi: WMI returned a syntax error: you're probably running inside a thread without first calling pythoncom.CoInitialize[Ex] (no underlying exception)>
查看http://timgolden.me.uk/python/wmi/tutorial.html,我根据“CoInitialize & CoUninitialize”主题下的示例包装了代码,这使得代码工作,但它不断抛出"Win32 exception occurred releasing IUnknown at..."
然后查看http://mail.python.org/pipermail/python-win32/2007-August/006237.html 和后续帖子,尝试跟进 - 但是pythoncom._GetInterfaceCount() 始终是 20。
我猜这在某种程度上与 Pylons 产生工作线程和类似的废话有关,但是我有点迷失在这里,建议会很好。
提前致谢,
安德斯
编辑:如果你正在做类似的事情,不要打扰 WMI 模块,只需使用 http://msdn.microsoft.com/en-us/library/aa394531%28VS.85%29.aspx ,你不必担心这样的线程废话。
【问题讨论】:
-
你能用 CoInitialize 发布整个列表
-
没问题,我回家后就开始了。
标签: python multithreading wmi pylons