Мы работаем над проектом, который требует от нас взаимодействия с определенным набором оборудования;одним набором можно очень легко управлять с помощью C #, другой из которых изначально программируется с использованием Python.Часть проекта включает в себя установку оборудования, работающего на Python, для связи с оборудованием, работающим через C #, и, к сожалению, из-за нехватки времени мы не можем создать набор программного обеспечения на C # или Python для управления другим набором оборудования.
Набор оборудования, работающего на Python, полностью основан на событиях, так как мы можем программировать функции, которые вызываются, когда оборудование выполняет определенные условия.Мы думали изменить приложение C #, управляющее другим набором оборудования, для размещения приложения Python (используя что-то вроде Application.Run()
), а затем запрограммировать функции Python для передачи соответствующих данных в приложение C # по мере поступления событий от оборудования.
Мы рассматриваем использование сокетного соединения для управления связью между ними, поскольку и C #, и Python довольно просты, чтобы работать таким образом (или так утверждает наш парень из Python).Наибольшую озабоченность вызывает то, что у нас возникнут проблемы с тем, что обе программы будут размещены на одной машинеЕсли это не будет проблемой, мы, вероятно, в конечном итоге будем использовать общую библиотеку, такую как 0MQ
Мы также провели некоторые исследования в следующих областях:
- Трубы / Именованные каналы
- Очереди сообщений
- Общая память
В основном мы хотим знать, какой из этих (или любых других) методов будетпроще всего реализовать с этими языками, и это даст нам лучшую производительность.Нас интересует только скорость и точность данных (т. Е. При использовании сетевых пакетов один из них будет отбрасывать меньше всего).Безопасность не имеет значения.
В идеале должен быть один поток данных, идущий из приложения Python в приложение C #, и два потока данных, идущие из приложения C # в приложение Python.Хост-машина будет работать под управлением Windows 7. При необходимости я могу предоставить дополнительную информацию.