4

現在の python 実行"python debug mapper"を示す を作成しています'snapshot'

現在、他のスレッドの実行中に発生しないpause every other threadsようにする方法を知る必要があります。'capture'

何か方法はありますか:

  • PauseOtherThreads();
  • ResumeOtherThreads();

ありがとう。

ps: Celery と Django でコードを動作させるには、何か変更を加える必要がありますか?

4

2 に答える 2

1

他のスレッドの実行中に 1 つのスレッドだけをトレースするか、他のスレッドを停止するかによって、2 つの解決策を考えることができます。他のスレッドをトレースせずに実行する必要がある場合は、トレース コマンドで現在のスレッド ID を最初にチェックし、そのスレッドが目的のスレッドである場合にのみトレース操作を実行します。

def dotrace():
    if tracing and threading.current_thread() == the_traced_thread:
        ... do the tracing ...

代わりに、トレース中に他のスレッドを停止する必要がある場合は、次のようなものを追加して、トレース操作を他のスレッドの停止として機能させることができます。

def dotrace():
    while tracing and threading.current_thread() != the_traced_thread:
        time.sleep(0.01)
    if tracing and threading.current_thread() == the_traced_thread:
        ... do the tracing ...

もちろん、最後のケースではトレース操作のみが停止として機能するため、他のスレッドは、終了するか、トレースされていることを実行するまで実行し続ける可能性があります。

基本的に、監視している他のスレッドのみを停止し、他のすべてのスレッドを停止するわけではありません。プログラムがまだ機能し続ける可能性が高まるため、これは良いことだと思います(使用するライブラリとフレームワークの一部は、トレースされているスレッドが実際に機能するために実行するために他のスレッドを必要とする場合があります)が、もちろんYMMV.

于 2012-07-16T06:36:54.393 に答える
0

あなたは使用することができますsys.setcheckinterval(somebignumber)

setcheckinterval(...)
    setcheckinterval(n)

    非同期イベントをチェックするよう Python インタープリターに指示します。
    n 命令。これは、スレッド切り替えの発生頻度にも影響します。
于 2012-07-16T06:13:31.723 に答える