2016-08-01 29 views
1

also habe ich diesen Code, wo ich diese beiden Threads hintereinander konstant ausführen müssen.Wie kann ich diese beiden Threads nacheinander hintereinander python laufen lassen?

Also, sobald Thread 1 beendet, Thread 2 geht und einmal Thread 2 endet, dann Thread 1 geht dann Thread 2 usw. ... wie ständig, als ob es eine Endlosschleife ist.

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() 

So im Wesentlichen brauche ich diesen Thread 1 Start dann beenden, Faden 2 beginnt dann beenden, ständig ausgeführt werden (als ob es in einer Endlos-Schleife ist).

Ich habe einen Threadpool in Python dafür verwendet, aber ich habe keine Ahnung, wie man es anwendet.

Irgendwelche Ideen, was ich tun könnte, um die gewünschten Ergebnisse zu erzielen?

Prost Vielen Dank im Voraus!

+1

Sie nicht Thread müssen nacheinander – YOU

Antwort

1

Dies ist, was Sie wollten

while True: 
    t1 = Thread(target = rfWaterLevelFinal()) 
    t1.start() 
    t1.join() 
    t2 = Thread(target = sendDataFinal()) 
    t2.start() 
    t2.join() 

Aber keine Notwendigkeit zu laufen wie das mit Gewinde, können Sie einfach die Methoden aufrufen.

while True: 
    rfWaterLevelFinal() 
    sendDataFinal() 
+0

Ich brauche Art laufen sie als Thread ausgeführt als die ersten Methoden ordnungsgemäß ausgeführt werden muss (wie es rf Daten empfängt und wenn es irgendeine Verzögerung während des Prozesses es, friert/verzögert alle anderen Daten) – Verglas

+0

Wie auch immer Sie erwähnt haben, müssen Sie warten, bis der Thread 1 fertig ist, um den Thread zu starten. 2. Also werden 2 Optionen als solche funktionieren –