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

2024-03-28 12:39:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在生成一个"python debug mapper",它显示当前python执行的'snapshot'

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

有没有办法:

  • PauseOtherThreads()
  • ResumeOtherThreads()

谢谢。在

p.s:我应该做些修改来让代码与celeri和Django一起工作吗?在


Tags: 方法代码debugsnapshot线程capturepauseother
2条回答

根据你是想在其他线程运行时跟踪一个线程,还是要停止其他线程,我可以考虑两种解决方案。如果其他线程必须在不跟踪的情况下运行,只需让trace命令首先检查当前线程id,并且只有当您感兴趣的线程是该线程时才执行跟踪操作:

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

相反,如果在跟踪一个线程时其他线程必须停止,则可以让您的跟踪操作作为其他线程的暂停来工作,添加类似于:

^{pr2}$

当然,在最后一种情况下,只有跟踪操作才起到暂停的作用,因此其他线程可能会一直运行,直到它们完成或执行任何被跟踪的操作。在

基本上,您只会停止正在监视的其他线程,而不是所有其他线程。我认为这是好的,因为这增加了程序仍能正常工作的可能性(您使用的一些库和框架可能需要运行其他线程才能跟踪线程实际工作),但当然,YMMV。在

您可以使用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.

相关问题 更多 >