所以我有这段代码,我需要这两个线程不断地一个接一个地运行。
因此,一旦线程 1 完成,线程 2 就会继续运行,一旦线程 2 完成,线程 1 就会继续运行,然后线程 2 继续运行,等等...就像是一个无限循环一样。
import httplib, urllib
import time, sys
import serial
from threading import Thread
#from multiprocessing import Process
key = 'MY API KEY' #API Key required for ThingSpeak.
rfWaterLevelVal = 0 #Global variable that holds the final water level value.
ser = serial.Serial('/dev/ttyUSB0',9600)
#Gathers the rf data received and separated it to obtain the water level data.
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)
#Created purely to making the multithreading easier.
def rfWaterLevelFinal():
while True:
try:
rfWaterLevel()
except KeyboardInterrupt:
print "caught keyboard interrupt"
sys.exit()
#Sends the sensor data over to ThingSpeak.
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)
response = conn.getresponse()
print response.status, response.reason
data = response.read()
conn.close()
#Created purely to make multithreading easier.
def sendDataFinal():
while True:
try:
sendDataFinal()
except KeyboardInterrupt:
print "caught keyboard interrupt"
sys.exit()
#start thread 1 for rf water level data.
t1 = Thread(target = rfWaterLevelFinal())
t1.start()
#start thread 2 for sending the data.
t2 = Thread(target = sendDataFinal())
t2.start()
#wait for both threads to finish
t1.join()
t2.join()
所以本质上我需要线程 1 开始然后完成,线程 2 开始然后完成,以不断运行(就好像它处于无限循环中一样)。
我已经考虑过在 python 中使用线程池,但我不知道如何应用它。
关于如何获得我想要的结果有什么想法吗?
干杯 提前致谢!
最佳答案
这就是你想要的,
while True:
t1 = Thread(target = rfWaterLevelFinal())
t1.start()
t1.join()
t2 = Thread(target = sendDataFinal())
t2.start()
t2.join()
但是不需要像线程那样运行,你可以直接调用方法。
while True:
rfWaterLevelFinal()
sendDataFinal()
关于python - 我怎样才能让这两个线程一个接一个地不断运行python?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38691273/