4

我正在制作一个"python debug mapper"显示'snapshot'当前 python 执行的

目前,我需要知道一种方法,pause every other threads以便'capture'在其他线程运行时不会发生。

有没有办法:

  • 暂停其他线程();
  • 恢复其他线程();

谢谢。

ps:我应该进行任何修改以使代码与 Celery 和 Django 一起使用吗?

4

2 回答 2

1

根据您是否只想在其他线程正在运行时跟踪一个线程,或者您是否想停止其他线程,我可以考虑两种解决方案。如果其他线程必须在不跟踪的情况下运行,只需让您的跟踪命令首先检查当前线程 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)

设置检查间隔(...)
    设置检查间隔(n)

    告诉 Python 解释器每隔一段时间检查一次异步事件
    n 说明。这也会影响线程切换发生的频率。
于 2012-07-16T06:13:31.723 回答