2016-11-09 4 views
0

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

Является ли это также возможно использовать библиотеку 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 обеспечит надлежащую синхронизацию передачи данных.

+0

Я не могу принять этот ответ на данный момент, потому что ответ, основанный на опыте, будет более практичным. Кстати, мне кажется противоречащим, что ADS отправит те же данные дважды в 2 процесса, которые работают на одном и том же ip-адресе. Разве вы не согласны с тем, что ip-адрес - это единственное, что позволяет системе TwinCAT различать устройства? –

+0

PyAds - это всего лишь тонкая оболочка вокруг TcAds, которую я использую в .NET более 5 лет, если вы хотите получить ответ на основе опыта :) Возможно, вы можете узнать больше о TCP/IP, чтобы понять, как связь между клиент ADS и система TC работают и как система TC может различать несколько соединений, поступающих с одного и того же IP-адреса. Например, ответ здесь: http://stackoverflow.com/questions/3329641/how-do-multiple-clients-connect-simultaneous-to-one-port-say-80-on-a-server Если вы «все еще сомневаюсь, вы всегда можете написать какой-то прототип, чтобы доказать это. – stevenv

+0

Спасибо, чувак, пожалуйста, поддержите мой вопрос, если считаете, что это достаточно хорошо. –

Смежные вопросы