मेरे पास पायथन में मल्टीप्रोसेसिंग के लिए एक वर्ग है जो 3 अलग-अलग प्रक्रियाएं बनाता है। पहली प्रक्रिया यह जाँचने के लिए है कि क्या मेरे हार्डवेयर से कोई संकेत है और इसे एक कतार में धकेलना है, दूसरी प्रक्रिया डेटा को कतार से बाहर निकालने और इसे डेटाबेस में धकेलने के लिए है और तीसरी प्रक्रिया डेटा को डेटाबेस से बाहर निकालने के लिए है। और इसे सर्वर पर धकेल रहा है।

obj = QE()
stdFunct = standardFunctions()

watchDogProcess = multiprocessing.Process(target=obj.watchDog)
watchDogProcess.start()
        
pushToDBSProcess = multiprocessing.Process(target=obj.pushToDBS)
pushToDBSProcess.start()
        
pushToCloud = multiprocessing.Process(target=stdFunct.uploadCycleTime)
pushToCloud.start()
        
watchDogProcess.join()
pushToDBSProcess.join()
pushToCloud.join()

मेरी पहली दो प्रक्रियाएं पूरी तरह से वांछित चल रही हैं, हालांकि मैं तीसरी प्रक्रिया से जूझ रहा हूं। मेरी तीसरी प्रक्रिया का कोड निम्नलिखित है:

def uploadCycleTime(self):
    while True:
        uploadCycles = []
        lastUpPointer = "SELECT id FROM lastUploaded"
        lastUpPointer = self.dbFetchone(lastUpPointer)
        lastUpPointer = lastUpPointer[0]
        # print("lastUploaded :"+str(lastUpPointer))
        cyclesToUploadSQL = "SELECT id,machineId,startDateTime,endDateTime,type FROM cycletimes WHERE id > "+str(lastUpPointer)
        cyclesToUpload = self.dbfetchMany(cyclesToUploadSQL,15)
        cyclesUploadLength = len(cyclesToUpload)
        if(cyclesUploadLength>0):
            for cycles in cyclesToUpload:
                uploadCycles.append({"dataId":cycles[0],"machineId":cycles[1],"startDateTime":cycles[2].strftime('%Y-%m-%d %H:%M:%S.%f'),"endDateTime":cycles[3].strftime('%Y-%m-%d %H:%M:%S.%f'),"type":cycles[4]})        
            # print("length : "+str(cyclesUploadLength))
            lastUpPointer = uploadCycles[cyclesUploadLength-1]["dataId"]
            
            uploadCycles = json.dumps(uploadCycles)
            api = self.dalUrl+"/cycle-times"
            uploadResponse = self.callPostAPI(api,str(uploadCycles))
            print(lastUpPointer)
            changePointerSQL = "UPDATE lastUploaded SET id="+str(lastUpPointer)
            try:
                changePointerSQL = self.dbAbstraction(changePointerSQL)
            except Exception as errorPointer:
                print("Pointer change Error : "+str(errorPointer))
            time.sleep(2)

अब मैं अपलोड की गई अंतिम आईडी को याद रखने के लिए एक पॉइंटर सहेज रहा हूं, और वहां से 15 पैकेट अपलोड करता रहता हूं। जब डीबी में डेटा मौजूद होता है तो कोड अच्छी तरह से काम करता है, हालांकि अगर प्रक्रिया शुरू होने पर कोई मौजूदा नहीं है और डेटा बाद में भेजा जाता है तो यह डीबी से डेटा लाने में विफल रहता है।

मैंने वास्तविक समय में लंबाई को प्रिंट करने की कोशिश की, यह मुझे 0 देता रहता है, वास्तविक समय में डेटा को लगातार डीबी में धकेलने के बावजूद।

0
Aaditya Damani 27 नवम्बर 2020, 17:05

1 उत्तर

सबसे बढ़िया उत्तर

मेरी अपलोड प्रक्रिया में, मैं एक प्रतिबद्ध () से चूक गया

def dbFetchAll(self,dataString):
    # dataToPush = self.cycletimeQueue.get()
    # print(dataToPush)
    dbTry = 1
    try:
        while(dbTry == 1): # This while is to ensure the data has been pushed
            sql = dataString
            self.conn.execute(sql)
            response = self.conn.fetchall()
            dbTry = 0
            return response
            # print(self.conn.rowcount, "record inserted.")
    except Exception as error:
        print ("Error : "+str(error))
        return dbTry

    ***finally:
        self.mydb.commit()***
0
Aaditya Damani 29 नवम्बर 2020, 05:13