現在、私はこれらの2つの方法で常に別のデバイスからRFデータを読み取り、別の方法でそのデータを頻繁に送信します。1つのメソッドを常に実行し、特定の期間ごとに別のメソッドを実行する
どうすればいいですか? sendData()メソッドはできるだけグローバル変数からデータを取得するだけで、RFデータの受信を常に更新して受信する必要があります。
相続人はこれまでのところ、それは働いていない以下のコード...
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()
助けてください!
明確にするために、rfデータが絶え間なく着信するので、私はrfWaterLevel()メソッドが絶えず実行され、sendData()を呼び出すだけですぐに呼び出すことができます(約5秒ごと)。しかし、それが入ってくるrfデータに何らかの種類の遅延があると、rfデータ自体が更新されず(受信された)、送信されるデータはrf送信機から送信されているものに対して正確ではないように見える。
ありがとうございます!
おかげで、ちょうど質問、 「止める」とは思わない?だから、私が意味することは、最初のスレッド関数は、常にrfデータが絶えず入ってくるので、常に実行されるはずです...私はちょうど両方の "join()"文を取り除きますか? – Verglas