当产生多个线程时,我可以执行以下操作来检查线程是否是主线程:
isinstance(threading.currentThread(), threading._MainThread)
但是这种方法依赖于"受保护的"线程包的成员和多处理库中没有类似的类型可用于导入,那么检查当前进程是否是主进程的正确方法是什么(并且对线程执行相同的操作?)
我现在这样做:
multiprocessing.current_process().name == 'MainProcess'
但这些名字是否可靠?
答案 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
。