Здравствуйте, у меня странная проблема, может быть, кто-то может помочь, я начинаю с запуска 2 разных функций с одним и тем же аргументом, который является объектом, который уже создан:
iotComponent.connectedSensors=sensorList
iotComponent.connectedHUIs=HUIList
Coap = multiprocessing.Process(target=runCoapSync,args=(iotComponent,))
huis = multiprocessing.Process(target=runHuis,args=(iotComponent,))
huis.start()
Coap.start()
, тогда вот обе функции:
async def runCoap(iotDevice):
context = await Context.create_client_context()
sensor=iotDevice.connectedSensors[0]
while True:
await asyncio.sleep(1)
sensor.sense()
lightMsg = iotDevice.applicationInterface.createMsg( sensor, iotDevice.communicationProtocol.name)
await iotDevice.communicationProtocol.sendMsg(context,lightMsg,"light")
def runHuis(iotDevice):
print("----------------1---------------")
LCD=iotDevice.connectedHUIs[0]
while True:
LCD.alertHuman(iotDevice.connectedSensors[0].data.value)
в первой функции, когда вызывается sensor.sense()
, атрибут значения внутри атрибута данных датчика обновляется.
Но во второй функции iotDevice.connectedSensors[0].data.value
всегда равенв ноль.Я нахожу это поведение странным, потому что это тот же объект.Более того, если я добавлю строку sensor.sense()
во вторую функцию, значение будет обновлено, но оно не совпадает со значением, напечатанным в первой функции.
РЕДАКТИРОВАТЬ 0: вот метод sense ():
def sense(self):
pinMode(self.pinNumber, "INPUT")
lightSensorValue = analogRead(self.pinNumber)
self.data.timestamp=str(round(time.time(), 3))
self.data.value=lightSensorValue
Если у кого-то есть идея, которая была бы великолепна!
РЕШЕНИЕ: как сказано в принятом ответе, я попытался с многопоточностью, и это сработало как шарм:
Coap = threading.Thread(target=runCoapSync,args=(iotComponent,))
huis = threading.Thread(target=runHuis,args=(iotComponent,))
huis.start()
Coap.start()