gpt4 book ai didi

python - 检查当前在 python 中执行的线程

转载 作者:太空宇宙 更新时间:2023-11-03 14:04:18 28 4
gpt4 key购买 nike

在 python 中,是否可以询问线程当前正在做什么?一些代码可能如下所示:

import threading
import time
import random


def foo():
a = 'spam'


def bar():
if random.random() < 0.01: # go into an infinite loop 1% of the time
while True:
x = 42

def run(heartbeat):
while True:
foo()
bar()
heartbeat.set()

heartbeat = threading.Event()
t = threading.Thread(target=run, args=(heartbeat, ))
t.start()

while True:
time.sleep(1)
if heartbeat.is_set():
heartbeat.clear()
else:
print('Thread appears stuck at the following location: ')
print(get_thread_position(t))

我希望这样做来监视线程以查看它们是否挂起。心跳事件检查它们是否处于事件状态并且是否正常进行。但是,如果它们卡在某个地方,我希望能够找出位置。这就是我发明 get_thread_position() 的地方,我想返回它当前正在执行的函数的回溯之类的东西。这样,我就可以使用该信息来弄清楚它是如何陷入某个无限循环的。

最佳答案

您可以使用 sys._current_frames() 为每个当前运行的线程获取顶部帧列表,然后在其中找到您的线程,然后检查它的帧,例如:

import sys

def get_thread_position(thread):
frame = sys._current_frames().get(thread.ident, None)
if frame:
return frame.f_code.co_filename, frame.f_code.co_name, frame.f_code.co_firstlineno

这将返回一个元组,其中包含文件名、函数名和当前在该线程中执行的函数的行号。当然,您也可以获取其他帧信息。如果找不到线程(即同时死亡),它将不会返回任何内容(None)

关于python - 检查当前在 python 中执行的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45290223/

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