Используйте библиотеку pyads в нескольких процессах Python параллельно

Я импортировал pyads ( Python lib для связи через библиотеку TwinCAT с TcAdsDll.dll). Я читал здесь, что эта библиотека поддерживает многопоточность.

Можно ли также использовать библиотеку pyads в нескольких процессах без конфликтов?

Чтобы избежать конфликта, я подумал о создании оболочки pyads, которая разделяет данные ADS для нескольких процессов с многопроцессорностью и очередями, но это будет довольно трудоемкая работа по сравнению с просто выполнением:

# process1:
pyads.open_port()
self.adr = pyads.AmsAddr('192.168.2.11.1.1', 851)
data = pyads.read_by_name(adr, args)

И в аналогичном процессе:

# process2:
pyads.open_port()
self.adr = pyads.AmsAddr('192.168.2.11.1.1', 851)
data = pyads.read_by_name(adr, args):

Просто запуск pyads.open_port() в нескольких процессах не вызывает ошибок. Я надеюсь, что кто-то может сказать мне, если бы я получил те же данные в обоих процессах без конфликтов / приоритетов.

[Редактировать:] Мы внедрили нашу систему путем многопроцессорной обработки и обмена данными между процессами, чтобы избежать риска проблем с синхронизацией. Это работает безупречно, но вводит некоторые потоки данных и накладные расходы на программирование.

1 ответ

Решение

Из того, что я вижу в pyads Исходный код и основанный на том, что я знаю о DLL TcAds, вы должны быть в порядке с вашими двумя процессами, устанавливающими их собственное соединение. Вы можете иметь много клиентских одновременных подключений к системе TwinCAT. Маршрутизатор ADS обеспечит правильную синхронизацию передачи данных.

Другие вопросы по тегам