如何提取子流程的状态



我的情况如下:首先,我打开了一个子流程,同时保留了一个主流程,就像subprocess = Process(target=func, name='MySubprocess')一样

当我在subprocess.start()之前打印subprocess时,我得到的信息如下:<Process(MySubprocess), initial>
subrpocess.start()后,打印subprocess,得到<Process(MySubprocess), started>subrpocess.join()后,我得了<Process(MySubprocess, stopped)>

所以我现在想知道如何提取initialstarted甚至stopped。我知道使用Subprocess.is_alive()来确认子进程的活动状态是可能的,但如果我可以提取一个像"初始"或"停止"这样的状态,那么我就可以根据我的要求使用它来做出判断,这将是一件好事。

谢谢你花时间复习这个问题并给我答案。

打印subprocess时,打印出的是multiprocessing.BaseProcess.__repr__方法返回的字符串。您要查找的状态似乎总是遵循父进程id。只要将来仍然如此,就可以使用正则表达式搜索来提取此状态:

parent=d+ (w+)
  1. parent=-匹配'parent='
  2. d+-匹配一个或多个数字
  3. -匹配单个空间
  4. CCD_ 19-匹配一个或多个";单词字符";在捕获组1中

请参阅Regex演示

from multiprocessing import Process
import re

def get_status(process):
"""
Return the current status of the passed process instance as a string.
"""
regex = r'parent=d+ (w+)'
m = re.search(regex, process.__repr__())
return m[1] if m else 'unknown'
def worker():
import time
time.sleep(1)
if __name__ == '__main__':
p = Process(target=worker, name='my_process')
print(get_status(p))
p.start()
print(get_status(p))
p.join()
print(get_status(p))

打印:

initial
started
stopped

但请注意,这些描述可能会在未来的Python版本中发生更改

因此,您最好使用以下逻辑:

from multiprocessing import Process

def get_status(process):
if process.is_alive():
return 'started'
# Either never started or has already terminated:
return 'initial' if process.exitcode is None else 'stopped'
def worker():
import time
time.sleep(1)
if __name__ == '__main__':
p = Process(target=worker, name='my_process')
print(get_status(p))
p.start()
print(get_status(p))
p.join()
print(get_status(p))

打印:

initial
started
stopped

相关内容

  • 没有找到相关文章

最新更新