因此,目前我就是这样两种方法,一种是不断从另一个设备读取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