Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Wangarad 01. 03. 2021, 08:39:20

Název: Python ako spravne pouzivat threading?
Přispěvatel: Wangarad 01. 03. 2021, 08:39:20
Zdravim.
Snazim sa spravne pouzivat threading spojeny s GUI. Mam ale pocit ze nieco je zle.
Idea je taka ze nastartujem thready potom sa nastartuje GUI a to nasledne skusa ci je thread aktivny ak nie tak ho znova nastartuje. Ale mam pocit ze nieco je zle resp. slo by to vyriesit elegantnejsie. Vie niekto poradit ako sa to ma "spravne" riesit?
Kód: [Vybrat]
layout = [[sg.Output(size=(80,10))],
            [sg.Button('Exit')],[sg.Button('Debug ON/OFF'), sg.Button('Movement monitoring ON/OFF')]]

window = sg.Window('Shifter V 1.0', layout)

#XML_domino.XML_To_DB(Model, Batch)
#Start Thereading
S1t = threading.Thread(target=Stage_1, args=("task",))
S1t.start()
S2t = threading.Thread(target=Stage_2, args=("task",))
S2t.start()
S3t = threading.Thread(target=Stage_3, args=("task",))
S3t.start()
while 1:
   #Connect to SQL
    if(SQL_Status == False):
      connect_to_database()

    if(SQL_Status == True and RFID_Status == False):   
      connect_to_RFID()   
    if(SQL_Status == True and RFID_Status == True):
        check()
        if S1t.is_alive() is False:
            S1t = threading.Thread(target=Stage_1, args=("task",))
            S1t.start()
        if S2t.is_alive() is False:   
            S2t = threading.Thread(target=Stage_2, args=("task",))
            S2t.start()
        if S3t.is_alive() is False:   
            S3t = threading.Thread(target=Stage_3, args=("task",))
            S3t.start()
   
       
    window.Refresh()
    (event, value) = window.Read(timeout=1)
    if event == 'Debug ON/OFF':
       if enable_debug == 'True':
             enable_debug = 'False'
             print('Debug Mode OFF')
       else:
              enable_debug = 'True'   
    if event == 'Movement monitoring ON/OFF':
          if debug_only_movement == 'True':
                 debug_only_movement = 'False'
                 print('Movement monitoring OFF')
          else:
                    debug_only_movement = 'True' 
                    print('Movement monitoring ON')       
    if event == sg.WIN_CLOSED or event == 'Exit':
           
       break
Název: Re:Python ako spravne pouzivat threading?
Přispěvatel: IDontCare 01. 03. 2021, 10:35:03
Co je Stage_1,Stage_2, Stage_2? Co to ma cele delat?
Název: Re:Python ako spravne pouzivat threading?
Přispěvatel: Wangarad 01. 03. 2021, 14:07:00
To su funkcie ktore sa v podstate vykonavaju v cykle a obsluhuju databazu v style (select/update) etc skrz pyodbc
Název: Re:Python ako spravne pouzivat threading?
Přispěvatel: IDontCare 01. 03. 2021, 14:37:29
Jeste je tam zahadna funkce check(), nehlede na to ze pokud je splinena podminka  if(SQL_Status == True and RFID_Status == True) bude se cyklus provadet do nekonecna, pouziti vlaken nedava moc vyznam. Dalsi vec je, ze pokud Stag_1, Stage_2, Stage_3 maji byt provedeny v poradi, coz naznacuje jejich nazev je pouziti vlaken vubec vhodne?
Název: Re:Python ako spravne pouzivat threading?
Přispěvatel: Wangarad 01. 03. 2021, 15:06:00
IDontCare: praveze nie tie stage si predstav ako nezavysle. Teda kazda moze v kazdom momente dostat data. Preto su oddelene.
check() - je len funkcia bokom.
Cela idea je je sa nastartuje GUI. Spravy si spojenia a potom len v klude checkuje ci thread nespadol.

Ide mi o to ci je toto korektne riesenie.
Název: Re:Python ako spravne pouzivat threading?
Přispěvatel: Wangarad 01. 03. 2021, 15:06:58
Kód: [Vybrat]
#Start Thereading
S1t = threading.Thread(target=Stage_1, args=("task",))
S2t = threading.Thread(target=Stage_2, args=("task",))
S3t = threading.Thread(target=Stage_3, args=("task",))



#Start a main Loop
while 1:
   #Connect to SQL
    if(SQL_Status == False):
      connect_to_database()

    if(SQL_Status == True and RFID_Status == False):   
      connect_to_RFID()   
    if(SQL_Status == True and RFID_Status == True):
        #check()
        if S1t.is_alive() is False:
            now = datetime.now()
            current_time = now.strftime("%H:%M:%S")
            print ( current_time  + 'Station 1 Restarted')
            S1t.start()
        if S2t.is_alive() is False:   
            now = datetime.now()
            current_time = now.strftime("%H:%M:%S")
            print ( current_time  + 'Station 2 Restarted')
            S2t.start()
        if S3t.is_alive() is False:   
            S3t.start()
            now = datetime.now()
            current_time = now.strftime("%H:%M:%S")
            print ( current_time  + 'Station 3 Restarted')   
       
Název: Re:Python ako spravne pouzivat threading?
Přispěvatel: lazywriter 01. 03. 2021, 15:25:15
Jestli je to nový projekt, nebylo by lepší použít async?
Název: Re:Python ako spravne pouzivat threading?
Přispěvatel: IDontCare 01. 03. 2021, 16:49:35
To je fakt tezke hadat. Nezname cele zadani. Nevime co se deje a proc. Jestli to funguje , tak to funguje..