IPC между приложением Python и внедренной DLL - PullRequest
5 голосов
/ 12 января 2010

Привет переполнение стека: иногда читатель, первый постер.

Справочная информация:

Windows box с XP SP3, скоро будет обновлен до Windows Seven (MSDNAA <3) </p>

У меня есть внедренная DLL, которая получает циклы, перехватывая функцию, которая вызывается тысячи раз в секунду.

Я бы хотел связать / управлять этой DLL через приложение на python. По сути, DLL выполняет свою работу, приложение python обеспечивает мозг / принятие решений.

Мой план игры для этого состоит в том, чтобы в DLL был счетчик и оператор if. Каждый раз, когда вызывается подключаемая функция, counter ++, а затем возвращаются к исходной функции, пока что-то не будет, как (counter == 250) {// dostuff (); }. Хотя, несмотря на это, это позволит целевому приложению работать в основном беспрепятственно, но все равно позволит мне делать интересные вещи.

Проблема:

Я совершенно не знаю, какой метод IPC мне следует использовать для связи. У нас есть сокеты, общая память, каналы, сопоставление файлов (?), RPC и другие (на первый взгляд) эзотерические вещи, такие как запись в буфер обмена.

Я НИКОГДА не реализовывал какой-либо IPC, кроме игрушечных примеров.

Я вполне уверен, что мне нужно что-то, что:

  • Может обрабатывать разговоры между питоном и DLL
  • Не блокирует / не ждет
  • Может проверить ожидающие данные и продолжить, если их нет
  • Если задействованы блокировки, можно продолжить вместо ожидания
  • Чтение / запись тоже не требует много времени

Помощь? Спасибо за ваше время, я надеюсь, что предоставил достаточно общей информации и не нарушил никаких принятых соглашений.

Я хотел бы добавить, что окно с похожими вопросами очень круто, и я действительно просмотрел его перед публикацией.

Ответы [ 2 ]

2 голосов
/ 20 января 2011

Попробуйте розетки. Ваши требования по сути являются требованием асинхронной работы; В Python есть модуль asyncore для асинхронного ввода-вывода на сокетах. В то же время не похоже, что stdlib Python может асинхронно обрабатывать другие вещи IPC, поэтому я бы не рекомендовал их использовать.

1 голос
/ 07 января 2011

Если вам нет дела до реального времени, вы можете использовать файловую систему для связи: файл журнала для вывода DLL и файл конфигурации, который время от времени читается, чтобы изменить поведение DLL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...