2016-09-25 15 views
0

私のpythonスクリプトでは、私はcore dumpedを持っています。同じ関数が同時に2回呼び出されるからです。機能の実行をダブルを回避するための方法python - 同じ関数の複数の実行インスタンスを避ける方法

Here is the time 1474816913.68 
Here is the time 1474816913.68 
Erreur de segmentation (core dumped) 

機能は、GTKウィンドウでVTE端子の読み取り

def term(self, dPluzz, donnees=None): 
    text = str(self.v.get_text(lambda *a: True).rstrip()) 
    [...] 
    print "Here is the time " + str(time.time()) 

def terminal(self):  
    self.v = vte.Terminal() 
    self.v.set_emulation('xterm') 
    self.v.connect ("child-exited", lambda term: self.verif(self, dPluzz)) 
    self.v.connect("contents-changed", self.term) 

結果ですか?

+1

term機能の開始時に次の2行を追加します。しかし、PythonはGlobal Interpreter Lockを持っているので、それでも実際には "二重実行"ではありません。通常は、クリティカルセクションにロックを追加して、セクションに入る前にスレッドをキューに入れます。 https://docs.python.org/2/library/threading.html#lock-objects – Mai

+0

ありがとうございます。ダブルプリントはどうですか?奇妙な?これは初めてのことです。このスクリプトはUbuntuでうまく動作しますが、このバグはOpenSuseに表示されます... – Guillaume

+0

[mcve]はここで歓迎されるでしょう。 –

答えて

1

ダブル実行は、contents-changedイベントトリガーの結果である必要があります。

あなたのterm機能がすでに実行されているかどうかを確認して終了することができます。私の知る限りでは、コードセクションがスレッドを使用している「二重の実行」するための唯一の可能な方法を

if hasattr(self, 'term_has_executed'): return 
    self.term_has_executed = True 
+0

ありがとうございますが、これらの行では関数はまったく実行されません。 ダンプされたコアが消えたと言っています – Guillaume

+0

編集:とにかくうまくいくと思います。もう一度ありがとう:) – Guillaume

+0

あなたを歓迎します;-) – trincot

関連する問題