2015-02-05 2 views
2

Я использую Python 3.4. У меня есть программа, которая обеспечивает интеграцию с модулем COM в Windows, по win32com. Для обработки сообщений из этого модуля я использую метод pythoncom.PumpWaitingMessages() в бесконечном цикле while. Но бесконечный цикл python создает 100% загрузку ядра процессора (как показано в диспетчере задач Windows). Вопросы:python win32com "PumpWaitingMessages()" обработка

  1. Действительно ли это «работа» или особенность диспетчера задач Windows?

  2. Как этого избежать. Может быть, с помощью модуля asyncio или другим способом?

  3. Возможно ли обрабатывать сообщения в другом потоке или асинхронно с pythoncom?

ответ

1

PumpWaitingMessage будет обрабатывать сообщения и возвращаться, как только больше сообщений не будет обрабатываться.

Вы можете позвонить ему в цикле, но вы должны позвонить MsgWaitForMultipleObjects, или MsgWaitForMultipleObjectsEx, перед следующей итерацией цикла.

Избегайте вызывать эти функции до итерации начального цикла, поскольку они будут заблокированы, и у вас не будет возможности проверить, не выполнено ли какое-либо условие, есть ли сообщения для обработки или нет. Или, альтернативно, предоставить разумный тайм-аут для этих функций.