So derzeit bin ich diese zwei Methode, wo man die RF-Daten von einem anderen Gerät ständig liest und eine andere Methode sendet diese Daten immer wieder.Halten Sie eine Methode ständig ausgeführt und eine andere Methode jeden bestimmten Zeitraum
Wie könnte ich das tun? Ich brauche die eingehenden RF-Daten, die ständig aktualisiert und empfangen werden, während die sendData() -Methode die Daten von der globalen Variable einfach abgreift, wann immer es möglich ist.
Heres den Code unten so weit, aber es funktioniert nicht ...
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()
Bitte um Hilfe!
Nur um zu klären, brauche ich rfWaterLevel() -Methode, um ständig zu laufen, da die RF-Daten ständig ankommende, und ich sendData() nur aufgerufen werden muss, sobald es wieder bereit ist zu senden (etwa alle 5 Sekunden oder so)). Es scheint jedoch so, als ob, wenn irgendeine Art von Verzögerung für die ankommenden HF-Daten vorliegt, die HF-Daten nicht mehr selbst aktualisiert werden (das empfangene Ende) und somit die gesendeten Daten nicht genau sind, was vom HF-Sender gesendet wird.
Vielen Dank im Voraus!
Danke für die Antwort, nur eine Frage, was passiert, wenn der erste Thread ist nicht "soll" aufhören? Was ich damit meine, ist, dass die erste Threading-Funktion ständig ausgeführt werden soll, da die RF-Daten ständig kommen ... werde ich die "join()" - Anweisungen für beide einfach los? – Verglas