何か問題が発生したときにスレッドを停止するのに問題があります。すべてが計画どおりに実行されていれば、stop_thread()関数でスレッドを停止できますが、とにかく、自動的に停止することはほとんどありません。は失敗したスレッドを停止できません
class sample_thread:
def __init__(self):
self._running = True
def stop(self):
self._running = False
def run():
try:
do something
except:
do something
self._running = False
finally:
do something
self._running = False
これは私のスレッドクラスです。 2つのスレッド(メインを除く)の実行時間が最も長く、終了していない場合は、一定時間後に停止します。
def stop_thread(p):
print(time.time()-p['start'])
if time.time() - p['start'] > 240:
try:
p['thread_name'].stop()
do something more
p['thread_instance'].join(10)
if p['thread_instance'].is_alive():
print('[-] Thread should be dead, but is still alive. Try again later')
p['thread_name'].stop()
p['thread_instance'].join(10)
return False
else:
print('[+] Failed thread successful stopped')
return True
except:
print('[-] Error occured in stop_thread')
'p'は、スレッド(開始時刻、名前、インスタンスなど)に関するいくつかの情報を含むdictです。 私の問題は基本的に、予期せぬ事態が発生し、コードがif節に入ると、スレッドをもう止められなくなったということです。どれくらい頻繁にFalseを返し、stop_thread関数を実行します。 どのようなアイデアが私のコードに間違っていますか、それを修正してスレッドを確実に消滅させる方法はありますか? 私はすべての助けがうれしいです! ありがとうございました
OK ...短いbackgroundstory:私は〜6Kのファイルを持っており、VMS上でそれらを使用する必要があると私はスレッドが良いだろうと思いましたアイディア。しかし、私はそれらを止めることができない場合は、私はいくつかの実行中のスレッドで終わる信頼性の高い...スクリプトは自動的に数日、すべてのファイルが終了するまで実行する必要があります。私の場合、スレッディングは良いか悪いのですか? – Mugen
あなたはGILを知っていますか? Pythonでは、1つのコアしか得られません。もっと必要な場合は、マルチプロセッシングを使用してください。 – xaav
あなたの答えと助けてくれてありがとう。これは、私がPythonで作業して初めて、またスレッディングではじめてです。だから、私のコードには何が最善であるかという手がかりはありません。スレッディングのスレッドよりも、マルチプロセスのプロセスを確実に停止させる方が簡単ですか?もしそうなら、私はそれを実装しようとします。 – Mugen