gpt4 book ai didi

python - gevent:调试旋转线程?

转载 作者:太空宇宙 更新时间:2023-11-04 06:19:51 26 4
gpt4 key购买 nike

在我基于 gevent 的程序中,我在某处有一个线程,它陷入了一个循环,类似于:

while True:
gevent.sleep(0)

我怎么知道这是哪个线程?是否可以列出(并获取堆栈跟踪)正在运行的线程?

最佳答案

方法一、超时

我在我的代码中使用它来跟踪可能阻塞的 greenlets。发生这种情况时会引发 NodeTaskTimeout。只需将您的作业包装在 Timeout 中或为它们提供 TimeOut 对象。

 with Timeout(90, False):
task_jobs.join()

if task_jobs:
print 'task jobs killed', task_jobs
task_jobs.kill()
if settings.DEBUG:
raise NodeTaskTimeout

如果它挂起/阻塞/花费很长时间,则此打印将无法完成任务。尤其令人讨厌的是那些相互依赖并导致死锁的工作job1/thread -> job2/thread2 -> job3/thread3 和 job/thread3 仅在 job1 完成时完成,这永远不会发生,因为 job2 未完成,job2 未完成,因为 job3 未完成.. 你明白了; )

方法2 Settrace

http://www.rfk.id.au/blog/entry/detect-gevent-blocking-with-greenlet-settrace/

但您还需要将您怀疑正在“旋转”的代码放入 with block 中。

关于python - gevent:调试旋转线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13146206/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com