Итак, в настоящее время я - это два метода, когда каждый читает RF-данные с другого устройства постоянно, а другой метод отправляет эти данные так часто.Постоянно выполняйте один метод и другой метод, выполняющий каждый определенный период
Как я мог это сделать? Мне нужно, чтобы входящие данные RF постоянно обновлялись и принимались, в то время как метод sendData() просто извлекает данные из глобальной переменной всякий раз, когда это возможно.
Heres ниже код до сих пор, но это не работает ...
import httplib, urllib
import time, sys
import serial
from multiprocessing import Process
key = 'MY API KEY'
rfWaterLevelVal = 0
ser = serial.Serial('/dev/ttyUSB0',9600)
def rfWaterLevel():
global rfWaterLevelVal
rfDataArray = ser.readline().strip().split()
print 'incoming: %s' %rfDataArray
if len(rfDataArray) == 5:
rfWaterLevelVal = float(rfDataArray[4])
print 'RFWater Level1: %.3f cm' % (rfWaterLevelVal)
#rfWaterLevel = 0
def sendData():
global rfWaterLevelVal
params = urllib.urlencode({'field1':rfWaterLevelVal, 'key':key})
headers = {"Content-type" : "application/x-www-form-urlencoded","Accept": "text/plain"}
conn = httplib.HTTPConnection("api.thingspeak.com:80", timeout = 5)
conn.request("POST", "/update", params, headers)
#print 'RFWater Level2: %.3f cm' % (rfWaterLevelVal)
response = conn.getresponse()
print response.status, response.reason
data = response.read()
conn.close()
while True:
try:
rfWaterLevel()
p = Process(target=sendData(), args())
p.start()
p.join()
#Also tried threading...did not work..
#t1 = threading.Thread(target=rfWaterLevel())
#t2 = threading.Thread(target=sendData())
#t1.start()
#t1.join()
#t2.join()
except KeyboardInterrupt:
print "caught keyboard interrupt"
sys.exit()
Пожалуйста, помогите!
Чтобы уточнить, мне нужен метод rfWaterLevel(), чтобы работать постоянно, поскольку данные rf поступают постоянно, и мне нужно, чтобы sendData() просто вызывался, как только он готов снова отправить (примерно каждые 5 секунд). Но кажется, что если есть какая-то задержка для входящих rf-данных, тогда данные rf перестают обновляться (принятый конец), и, таким образом, отправляемые данные неточно соответствуют тому, что отправляется от радиочастотного передатчика.
Заранее благодарен!
Спасибо за ответ, просто вопрос, а что, если первая нить не «предполагается» остановиться? Итак, я имею в виду, что первая функция потоковой обработки должна постоянно работать, поскольку данные rf поступают постоянно ... я просто избавляюсь от операторов «join()» для обоих? – Verglas