检查当前进程/线程是否为主进程/线程的正确方法是什么?

时间:2018-02-10 09:01:15

标签: python

当产生多个线程时,我可以执行以下操作来检查线程是否是主线程:

isinstance(threading.currentThread(), threading._MainThread)

但是这种方法依赖于"受保护的"线程包的成员和多处理库中没有类似的类型可用于导入,那么检查当前进程是否是主进程的正确方法是什么(并且对线程执行相同的操作?)

我现在这样做:

multiprocessing.current_process().name == 'MainProcess'

但这些名字是否可靠?

1 个答案:

答案 0 :(得分:1)

这个似乎更可靠:

assert threading.current_thread() == threading.main_thread()

因为它不依赖于静态文本。

对于流程,执行process.name == 'MainProcess'并不可靠。你应该这样做:

import re

def is_main_process(process_name):
    return not bool(re.match(r'Process-\d+', process_name))

原因是保证子进程的格式为Process-N