13

このバグに見舞われました:

http://bugs.python.org/issue1856インタープリターのシャットダウン中のデーモン スレッドのセグメンテーション違反。

今、私はこのバグを回避するコーディング方法を探しています。

現時点では、コードは次のようになります。

while True:
    do_something()
    time.sleep(interval)

do_something() の前にインタプリタがまだ使用可能かどうかを確認する方法はありますか?

それとも、 mythread.setDaemon(True) とメインスレッドが終了したかどうかのチェックを行わない方が良いですか?

4

2 に答える 2

0

これはthreading.pyモジュールのコードです:

import sys as _sys

class Thread(_Verbose):
    def _bootstrap_inner(self):
        # some code

            # If sys.stderr is no more (most likely from interpreter
            # shutdown) use self._stderr.  Otherwise still use sys (as in
            # _sys) in case sys.stderr was redefined since the creation of
            # self.
            if _sys:
               _sys.stderr.write("Exception in thread %s:\n%s\n" % 
                   (self.name, _format_exc()))
            else:
               # some code

役立つかもしれません。表示されるエラーは、elseステートメントから発生します。だからあなたの場合:

import sys as _sys

while True:
    if not _sys:
        break/return/die/whatever
    do_something()
    time.sleep(interval)

ただし、機能するかどうかはわかりません(インタープリターのシャットダウンが内部で発生する可能性があるdo_somethingため、おそらくすべてをラップする必要があることに注意してくださいtry:except:)。

デーモン スレッドは必ずしも悪いものではありません。開発プロセスを確実に高速化できます。あなたは彼らに注意する必要があります。

于 2013-08-07T08:52:51.063 に答える