gpt4 book ai didi

python - 是否可以并行运行以下网络查询?

转载 作者:太空宇宙 更新时间:2023-11-03 18:21:18 25 4
gpt4 key购买 nike

我正在使用 Python 和 modbus_tk package轮询n 个 PLC。每次轮询大约需要 5 秒。是否可以并行运行它们,这样就不需要 n*5 秒来获取所有数据?

我当前的代码:

for ip in ip_addresses:
master = modbus_tcp.TcpMaster(host=ip_address)
my_vals = (master.execute(1, cst.READ_HOLDING_REGISTERS, starting_address=15))
return my_vals

最佳答案

我不了解 modbus_tk,但是你可以使用 the threading library ?为每个要轮询的 IP 地址创建 1 个线程。

这里有一些示例代码,应该可以帮助您上手:

import threading

class Poller( threading.Thread ):
def __init__( self, ipaddress ):
self.ipaddress = ipaddress
self.my_vals = None
threading.Thread.__init__(self)

def run( self ):
master = modbus_tcp.TcpMaster(host=self.ipaddress)
self.my_vals = (master.execute(1, cst.READ_HOLDING_REGISTERS, starting_address=15))


pollers = []
for ip in ip_addresses:
thread = Poller(ip)
pollers.append(thread)
thread.start()

# wait for all threads to finish, and collect your values
retrieved_vals = []
for thread in pollers:
thread.join()
retrieved_vals.append(thread.my_vals)

# retrieved_vals now contains all of your poll results
for val in retrieved_vals:
print val

多处理在这里也可以工作,尽管它对于这个问题来说有点过分了。由于这是一个 I/O 操作,因此它是线程化的理想选择。 GIL(全局解释器锁)不会减慢您的速度或任何其他事情,并且线程比进程更轻。

关于python - 是否可以并行运行以下网络查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24091682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com