Python 3程序启动并跟踪不同程序的完成情况



我正在编写一个python 3程序,该程序将启动另一个python程序来处理文件。我需要主程序来保持任意数量的进程在任何时候运行。每次一个进程结束时,我都会从文件中读取任意数字,看看是否应该派生另一个进程。

生成流程的最佳方式是什么?我需要知道这个过程什么时候结束,这样我才能产生另一个,但仅此而已。而且,我真的希望派生的程序作为一个完全独立的进程来执行。这些流程运行时间很长,并且占用了大量资源。我不需要知道程序的输出或退出状态,只需要知道它退出了。

我曾考虑过使用进程创建的互斥文件,但结果并不可靠。

有什么建议吗?

我建议您查看多处理库。

https://docs.python.org/3/library/multiprocessing.html

它产生了一个单独的python进程,您可以使用队列跟踪并与之通信。

#!/usr/bin/env python3
import multiprocessing
class MyFancyClass(object):
def __init__(self, name):
self.name = name
def do_something(self):
proc_name = multiprocessing.current_process().name
print('Doing something fancy in %s for %s!' % (proc_name, self.name))

def worker(q):
obj = q.get()
obj.do_something()

if __name__ == '__main__':
queue = multiprocessing.Queue()
p = multiprocessing.Process(target=worker, args=(queue,))
p.start()
queue.put(MyFancyClass('Fancy JimF'))
# Wait for the worker to finish
queue.close()
queue.join_thread()
p.join()

示例来自本文https://pymotw.com/2/multiprocessing/communication.html但是稍微更新了一下,以便在python3中运行(在本例中非常相似(。

在Python中,您可以使用os.system((、os.excl*家族、子进程、多处理来生成新进程。你可以根据自己的要求选择一个。

父进程可以使用信号SIGCHLD或os.waipid,os.wait*来知道子进程何时终止。有关更多详细信息,您可以查看subprocess.call((的源代码。

linux中的

SIGCHLD是一个陷阱信号,表示当前进程启动的进程已终止。

最后,我给出了一个简单的例子来展示如何使用子流程(Python 3(

import subprocess
subprocess.call(['ls', '-1'], shell=True)
print('main exit')

相关内容

最新更新