如何暂停Python中的所有其他线程?

时间:2012-07-16 06:03:44

标签: python celery

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

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

有没有办法:

  • PauseOtherThreads();
  • ResumeOtherThreads();

感谢。

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您可以使用sys.setcheckinterval(somebignumber)

setcheckinterval(...)
    setcheckinterval(n)

    Tell the Python interpreter to check for asynchronous events every
    n instructions.  This also affects how often thread switches occur.