2017-01-13 4 views
-1

私はロボットとPythonを使って作業しています。 私はマルチスレッド(この場合は2つのスレッド)を使用しています。スレッドBがイベントを受け取ったときにスレッドAを停止したい。キルンPythonのスレッド

メイン:

tA = threading.Thread(target=runThreadA) 
tA.setDaemon(True) 

tB = threading.Thread(target=runThreadB) 
tB.setDaemon(True) 

tA.start() 
tB.start() 

スレッドA:

def runThreadA(): 
    print "Estado1" 
    time.sleep(5) 
    print "Finalizo Estado1" 
    return 'out1' 

スレッドB:

def runThreadB(): 
    print "Estado2" 
    time.sleep(8) 
    print "Finalizo Estado2" 
    return 'a1' 

WEは、スレッドAが終了したスレッドB、そのスレッドを殺したいですBは3秒以上待ちません。

ありがとうございます。

+3

コードの一部を表示する必要があります。不足している部分が強調表示された[mcve]が理想的です。 –

+2

[Pythonでスレッドを削除する方法はありますか?](http://stackoverflow.com/questions/323972/is-there-any-way-to-kill-a-thread-in-python) – ppasler

答えて

1

このスレッドの外部から何かを削除しようとしないでください。あなたは そのスレッドがロックを保持しているかどうかわかりません。 Pythonは、スレッドを外部的に強制終了するための直接的なメカニズムを提供していません。ただし、ctypesを使用して を実行することはできますが、これはデッドロックのレシピです。

この見積もりはRaymond Hettingerのもので、これについてspeechがあります。

+1

+1しかし、私はあなたが検査を使ってPythonスタックフレームを直接使ってctypesを使わずにスレッドを中断できると思っています。私はそのアイデアをテストする時間がないが、それが可能でなければならないと思う。もちろん、私はこれが極端な状況以外では行われてはならないことに同意します.GILの管理はここで問題になる部分です。おそらくごみ収集も。 – Dalen