2016-04-06 11 views
5

Mam ten kod, jak mogę zatrzymać func2 z func1? coś Thread(target = func1).stop() nie działaZatrzymaj wątek 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() 

Odpowiedz

0

Lepiej zapytać drugą nitkę, aby zatrzymać przy użyciu kolejki komunikatów na przykład.

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

Ale gdy chcę na przykład użyć raw_input na koniec func1. Wtedy func2 nie może zamknąć func1. Czy istnieje jakieś rozwiązanie? –

0

Nie można powiedzieć wątku, aby zatrzymać, trzeba, aby powrócić w jego funkcji docelowej

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)