малиновый пи & gps python-muithreading - PullRequest
0 голосов
/ 18 ноября 2018

Я занимаюсь разработкой GPS (глобальный спутниковый бу-353s4 USB-тип) и проекта на базе Raspberry Pi 3B.В котором я хочу получить данные о широте и долготе GPS, в соответствии с этими данными я хочу воспроизвести некоторые видеофайлы, а также отследить название последнего воспроизведенного видео.весь этот процесс должен быть в то время как цикл означает бесконечный цикл.Я разработал логику для этого, проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда воспроизведение видео завершается, оно снова извлекает данные GPS и переходит в определенную папку, выбирает видеофайл и воспроизводит видео, в промежутке между двумя воспроизведением видео экран становится пустым. Я хочу непрерывное видеоиграть.Я использую OMXplayer для открытия видео. Я знаю, что это можно решить с помощью концепции многозадачности / многопоточности, но не знаю, как реализовать это в Python.это мой код:

# class to define background process thread
class Asyncfun(threading.Thread):
def __init__(self, text):
    threading.Thread.__init__(self)
    self.text = text

def run(self):
    os.system(self.text)
    print "play finished "
def Main(): 
try:
    while True:
        # get the GPS latitude longitude data using another gpsdatafetching file
        stdn = gps2.latlong()
        lat1 =  round(float(stdn[0]),5) 
        long1 = round(float(stdn[1]),5) 
        ID = gps_geotest3.test1(lat1,long1)# get the areaid according to current latitudeand longitude
        print "id is :", ID
        if ID == None:
            ID = 17
        print "lat long is in this areaId : ",ID
        location = '/home/pi/files/' 
        counter = 0 #keep a count of all files found
        mp4files = [] #list to store all csv files found at location
        lastplayedindex = 0
        areaID = str(ID)
        location += areaID
        #print "file path is: ",location
        for file in os.listdir(location):
            if file.endswith(".mp4"):
                #print "mp4 file found:\t", file
                mp4files.append(str(file))
                counter = counter+1

        #get the lastplayedindex_aeraid file name
        indexfilename='lastplayedindex_'        
        indexfilename +=areaID
        indexfilename += '.txt'
        #get the index number from lastplayedindex_aeraid file
        with open(indexfilename,'rb') as input_file:
            for line in input_file:
                lastplayedindex = line
        path = "/home/pi/files/" 
        omxcmd = "omxplayer --display=5 " 

        print "lastplayed index: ",lastplayedindex
        if int(lastplayedindex)< (counter-1) : #compare with total filecount in folder

            newlastindex=int(lastplayedindex)+1
            vfile = mp4files[newlastindex] #videofile name
            omxcmd += (location +'/') #append filelocation
            omxcmd += vfile # append filename
            #omxcmd is command to open videofile using OMXplayer
            #play videofile iin backgroundprocess while sending acknowledgment to webserver about that file
            background = Asyncfun(omxcmd)
            background.start()
            # code to update lastplayed index in local file

        counter = 0
        #to send acknowledgment to server about which video played last
        print "sending acknowledgment to server.."
        payload2 = {'DeviceMasterId': '30', 'Fk_Area_ID': areaID,'FileName':vfile}
        R = requests.post('url to my website', params = payload2)
        if R.status_code != 200:
            print "Error:", R.status_code
        else :
            print "acknowledgment sent successfully."
        background.join()
except (KeyboardInterrupt, SystemExit): #when you press ctrl+c
    gpsp.running = False
    gpsp.join()
    scope.__del__()
if __name__ == '__main__':
Main()
...