Skip to content

Commit e517b22

Browse files
committed
Performance improvement
1 parent bb00fce commit e517b22

File tree

2 files changed

+10
-12
lines changed

2 files changed

+10
-12
lines changed

thingsboard_gateway/connectors/modbus/modbus_connector.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ def __add_slave(self, slave_config):
213213
slave.master = master
214214

215215
self.__slaves.append(slave)
216-
slave.start()
216+
self.loop.create_task(slave.run())
217217
except ValueError as e:
218218
self.__log.error("Failed to add slave: %s", e)
219219

@@ -365,7 +365,7 @@ async def __convert_data(self):
365365

366366
batch_to_convert[batch_key].append(data)
367367

368-
for (device_name, uplink_converter), data in batch_to_convert.items():
368+
for (_, uplink_converter), data in batch_to_convert.items():
369369
converted_data: ConvertedData = uplink_converter.convert({}, data)
370370
self.__log.trace("Converted data: %r", converted_data)
371371
if len(converted_data['attributes']) or len(converted_data['telemetry']):

thingsboard_gateway/connectors/modbus/slave.py

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,7 @@
1313
# limitations under the License.
1414

1515
import asyncio
16-
from threading import Thread
17-
from time import sleep, monotonic
16+
from time import monotonic
1817
from typing import TYPE_CHECKING, Dict, Union
1918

2019
from _asyncio import Future
@@ -62,10 +61,8 @@
6261
from thingsboard_gateway.connectors.modbus.entities.master import Master
6362

6463

65-
class Slave(Thread):
64+
class Slave:
6665
def __init__(self, connector: 'ModbusConnector', logger, config):
67-
super().__init__()
68-
self.daemon = True
6966
self.stopped = False
7067
self._log = logger
7168
self.connector = connector
@@ -132,7 +129,7 @@ def __init__(self, connector: 'ModbusConnector', logger, config):
132129
for attr_config in self.attributes_updates_config:
133130
self.shared_attributes_keys.append(attr_config[TAG_PARAMETER])
134131

135-
def __timer(self):
132+
async def __timer(self):
136133
if self.__master is not None:
137134
self.__send_callback(monotonic())
138135
next_poll_time = monotonic() + self.poll_period
@@ -144,7 +141,7 @@ def __timer(self):
144141
next_poll_time = current_time + self.poll_period
145142

146143
sleep_time = max(0.0, next_poll_time - monotonic())
147-
sleep(sleep_time)
144+
await asyncio.sleep(sleep_time)
148145

149146
def __send_callback(self, current_monotonic):
150147
self.last_polled_time = current_monotonic
@@ -154,17 +151,18 @@ def __send_callback(self, current_monotonic):
154151
except Exception as e:
155152
self._log.exception('Error sending slave callback: %s', e)
156153

157-
def run(self):
154+
async def run(self):
158155
if self.uplink_converter_config.is_readable():
159-
self.__timer()
156+
await self.__timer()
160157

161158
def close(self, loop):
159+
self.stopped = True
160+
162161
future = asyncio.run_coroutine_threadsafe(self.disconnect(), loop)
163162
try:
164163
future.result(timeout=5)
165164
except Exception as e:
166165
self._log.error('Failed to disconnect from %s: %s', self, e)
167-
self.stopped = True
168166

169167
def get_name(self):
170168
return self.device_name

0 commit comments

Comments
 (0)