2016-04-06 6 views
5

ho questo codice, come posso interrompere func2 da func1? qualcosa come Thread(target = func1).stop() non funzionaStop a thread Python

import threading 
from threading import Thread 

def func1(): 
    while True: 
     print 'working 1' 

def func2(): 
    while True: 
     print 'Working2' 

if __name__ == '__main__': 
    Thread(target = func1).start() 
    Thread(target = func2).start() 

risposta

0

E 'meglio chiedere tuo altro thread di fermarsi, con una coda di messaggi per esempio.

import time 
import threading 
from threading import Thread 
import Queue 

q = Queue.Queue() 

def func1(): 
    while True: 
     try: 
      item = q.get(True, 1) 
      if item == 'quit': 
       print 'quitting' 
       break 
     except: 
      pass 
     print 'working 1' 

def func2(): 
    time.sleep(10) 
    q.put("quit") 
    while True: 
     time.sleep(1) 
     print 'Working2' 

if __name__ == '__main__': 
    Thread(target = func1).start() 
    Thread(target = func2).start() 
+0

Ma quando voglio per esempio utilizza raw_input alla fine del func1. Quindi func2 non può chiudere func1. C'è qualche soluzione per questo? –

0

Non si può dire un filo di fermarsi, bisogna farlo tornare nella sua funzione di destinazione

from threading import Thread 
import Queue 

q = Queue.Queue() 

def thread_func(): 
    while True: 
     # checking if done 
     try: 
      item = q.get(False) 
      if item == 'stop': 
       break # or return 
     except Queue.Empty: 
      pass 
     print 'working 1' 


def stop(): 
    q.put('stop') 


if __name__ == '__main__': 
    Thread(target=thread_func).start() 

    # so some stuff 
    ... 
    stop() # here you tell your thread to stop 
      # it will stop the next time it passes at (checking if done)