在多个 python 进程中并行使用 pyads 库
Use pyads library in multiple python processes in parallel
我导入了 pyads(Python lib to communicate through the TwinCAT library with TcAdsDll.dll. I've read here 这个库有多线程能力。
是否也可以多进程使用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() 在多个进程中不会抛出错误。我希望有人能告诉我如果没有 conflicts/prioritizing.
我是否会在两个进程中收到相同的数据
[编辑:]我们通过在进程之间进行多处理和共享数据来实现我们的系统,以避免不得不冒同步问题的风险。这工作完美,但引入了一些数据流和编程开销。
根据我在 pyads
源代码中看到的内容以及我对 TcAds dll 的了解,您应该可以让两个进程建立自己的连接。您可以有多个客户端同时连接到 TwinCAT 系统。 ADS 路由器将确保数据通信的正确同步。
我导入了 pyads(Python lib to communicate through the TwinCAT library with TcAdsDll.dll. I've read here 这个库有多线程能力。
是否也可以多进程使用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() 在多个进程中不会抛出错误。我希望有人能告诉我如果没有 conflicts/prioritizing.
我是否会在两个进程中收到相同的数据[编辑:]我们通过在进程之间进行多处理和共享数据来实现我们的系统,以避免不得不冒同步问题的风险。这工作完美,但引入了一些数据流和编程开销。
根据我在 pyads
源代码中看到的内容以及我对 TcAds dll 的了解,您应该可以让两个进程建立自己的连接。您可以有多个客户端同时连接到 TwinCAT 系统。 ADS 路由器将确保数据通信的正确同步。