线程 - 如何获取父进程ID/名称?

7 投票
3 回答
9104 浏览
提问于 2025-04-16 20:40

我想知道怎么从子线程获取父线程的ID或名字。举个例子,我有一个主线程叫做MainThread。在这个主线程里,我创建了几个新的子线程。然后我使用threading.enumerate()来获取所有正在运行的线程的引用,接着我选择其中一个子线程,想办法获取MainThread的ID或名字。有没有什么办法可以做到这一点呢?

3 个回答

0

你可能想在创建子线程的时候,把主线程的名字传给它们。

另外一个选择是,如果你在使用一个类的话,可以让子线程的目标指向主线程类中的一个方法:

class MainThread:
    name = "MainThreadName"

    def child_thread_run(self):
        print self.name # Will print "MainThreadName", even from a child thread

    def run(self):
        child = threading.Thread(target=self.child_thread_run)
        child.start()
1

你可以在子线程中引用父线程,然后获取父线程的ID。

7

创建一个线程的子类,在初始化时设置一个 parent 属性:

from threading import current_thread

class MyThread(threading.Thread):
    def __init__(self, *args, **kwargs):
        self.parent = current_thread()
        Thread.__init__(self, *args, **kwargs)

然后,在使用这个类启动的线程中工作时,我们可以通过 current_thread().parent 来获取创建这个线程的父线程对象。

撰写回答