因此,目前我就是這樣兩種方法,一種是不斷從另一個設備讀取RF數據,另一種方法每隔一段時間就發送一次數據。保持一種方法不斷運行,另一種方法每隔一段時間執行一次
我該怎麼做?我需要不斷更新和接收RF數據,而sendData()方法只需從全局變量中抓取數據即可。
下面的繼承人到目前爲止,但它不工作的代碼...
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秒鐘左右一次)。但似乎如果對傳入的射頻數據有任何延遲,則射頻數據會自行停止更新(接收端),因此發送的數據對射頻發射器發送的數據不準確。
在此先感謝!
感謝您的回答,只是一個問題,如果有什麼第一個線程不是「應該」停止?所以我的意思是,第一個線程函數應該是不斷運行的,因爲射頻數據不斷地出現......我是否擺脫了兩者的「join()」語句? – Verglas