Python:用于长时间任务的子进程Popen的替代方案

Python:用于长时间任务的子进程Popen的替代方案,python,parallel-processing,subprocess,Python,Parallel Processing,Subprocess,我已经寻找过类似的问题,但没有一个适合我的用例。 以下是我想要实现的一个简单示例,因为整个代码太长且不相关: While rc is None and process_list: rc = self.process.poll() output = self.process.stdout.readline() if some-condition: # doing stuff with output if other-condition:

我已经寻找过类似的问题,但没有一个适合我的用例。 以下是我想要实现的一个简单示例,因为整个代码太长且不相关:

While rc is None and process_list:
    rc = self.process.poll()
    output = self.process.stdout.readline()
    if some-condition:
        # doing stuff with output
    if other-condition:
        process = subprocess.Popen(some_cmd.split(), stdout=subprocess.PIPE, stderr=subprocess.DEVNULL)
        fd = process.stdout.fileno()
        fl = fcntl.fcntl(fd, fcntl.F_GETFL)
        fcntl.fcntl(fd, fcntl.F_SETFL, fl | os.O_NONBLOCK)
        process_list.append(process)
    check_process_list


def check_process_list(process_list):
    if process_list:
        for (i, (process)) in enumerate(process_list):
            if process.poll() is not None:
                output = process.stdout.readlines()
                # doing stuff with output
                process_list.pop(i)
我的想法是,我的主进程生成一个子进程(一个C程序),不断地读取它的输出(可能需要几天时间),在满足某些条件时处理输出:使用subprocess.Popen生成其他进程

这是可行的,但是它不像子进程那样健壮。Popen将结果放入一个64K缓冲区,并且可能会发生此缓冲区将被填充的情况,从而挂起子进程a,使程序在while循环中无限期地运行

文档明确指出,子流程Popen不适合长时间运行的任务,但是我找不到任何替代方案。 所有可以用Python编写的子流程都是用Python编写的,我正在使用多处理模块来生成它们。 但是对于其中的两个任务,除了运行C二进制文件,我没有其他解决方案。 使用communicate对我来说是没有选择的,因为我需要子流程并行运行,等待它们结束是没有用的


如果有人能提出一个更合适的方法来实现这一点,我将不胜感激

你能让进程写入文件吗?然后你就可以只轮询文件的内容了。嘿,对不起,我回复晚了。是的,我可以这样做,但是我可能会避免使用此解决方案,并找到一种正确的方法来执行与subprocess.popen相同的操作,但要执行长时间运行的任务。据说它不适合长时间运行的任务,所以我想知道有什么替代方案(如果有的话?)谢谢你