2016-04-06 24 views
5

このコードがありますが、func1をfunc2からどのように停止できますか? Thread(target = func1).stop()のようなものは、それは、例えばメッセージ・キューを使用して、停止するあなたの他のスレッドを尋ねるする方が良いでしょうスレッドを停止する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() 

答えて

0

を動作しません。

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

に戻る確認する必要がありますが、私は、たとえばたいときはfunc1の終わりにraw_input使用、停止するスレッドを伝えることはできません。 func2はfunc1を閉じることができません。これにはどんな解決策がありますか? –

0

あなたはあなたはそれがそのターゲット機能

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) 
関連する問題