Gå til innhold

[LØST] Avslutte flere tråder når en dør.


Anbefalte innlegg

La oss si at jeg har en prosess som kjører flere tråder. Hvis en av trådene avslutter, vil jeg at den andre også skal avslutte.

 

# pseudocode
STOP_FLAG = False

class Thread1:
   while not STOP_FLAG:
       # some code here.
       if i_want_to_stop:
           STOP_FLAG = True

class Thread2:
   while not STOP_FLAG:
       # some code here.
       if i_want_to_stop:
           STOP_FLAG = True

start Thread1
start Thread2

 

Å bruke en global variabel fungerte ikke da det ikke er mulig å endre den runtime. Er løsningen å lage en egen klasse med variabelen STOP_FLAG, og som har egne funksjoner for å endre verdien på variabelen i klassen? Eller finnes det allerede noe innebygd i python som muliggjør dette? Eventuellt andre elegante måter å gjøre dette på.

 

Tips?

 

Ørjan...

Endret av Orjanp
Lenke til kommentar
Videoannonse
Annonse

ser ut til at man kan bruke noe slikt som `global' til å deklarere at variablen er en global som kan endres fra trådene; slik:

 

import threading

   theVar = 1

   class MyThread ( threading.Thread ):

      def run ( self ):

         global theVar
         print 'This is thread ' + str ( theVar ) + ' speaking.'
         print 'Hello and good bye.'
         theVar = theVar + 1

   for x in xrange ( 20 ):
      MyThread().start()

 

(stjålet fra: http://www.devshed.com/c/a/Python/Basic-Th...ng-in-Python/1/ )

Lenke til kommentar

Endte med å bruke dictionary.

 

FLAG{'STOP': False}

class Thread1:
  while not FLAG['STOP']:
      # some code here.
      if i_want_to_stop:
          FLAG['STOP'] = True

class Thread2:
  while not FLAG['STOP']:
      # some code here.
      if i_want_to_stop:
          FLAG['STOP'] = True

start Thread1
start Thread2

 

Works like a charm.

 

Uansett, takk for tipset.

 

Ørjan...

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...