Я использую Pylons в сочетании с модулем WMI для базового системного мониторинга пары машин, для систем на основе POSIX все просто - для Windows - не так уж и много.
Выполнение запроса к серверу Pylons для получения текущего процессора, однако он не работает должным образом или, по крайней мере, с модулем 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 порождает рабочие потоки и всякую ерунду, как бы там ни было, но я вроде бы здесь потерян, совет был бы неплох.
Заранее спасибо,
Anders
РЕДАКТИРОВАТЬ: Если вы делаете что-то подобное, не беспокойтесь о модуле WMI, просто используйте http://msdn.microsoft.com/en-us/library/aa394531%28VS.85%29.aspx, и вам не нужно беспокоиться о том, что потоки дерьма похожи на это.