无需等待即可在python中启动多个进程

无需等待即可在python中启动多个进程,python,Python,我无法在不等待终止的情况下同时启动多个进程 我遍历目录,然后用外部脚本处理文件内容 命令行执行如下所示: python process.py < /dir/file 有没有办法在不等待终止的情况下启动它们?有。将它们存储在列表中,不要在循环中使用。它会阻塞 从文档中: 与进程交互:向stdin发送数据。从stdout和stderr读取数据,直到到达文件末尾等待进程终止。可选的输入参数应该是要发送到子进程的字符串,如果不应该向子进程发送数据,则应该是None 所以结果应该是这样的: #

我无法在不等待终止的情况下同时启动多个进程

我遍历目录,然后用外部脚本处理文件内容

命令行执行如下所示:

 python process.py < /dir/file

有没有办法在不等待终止的情况下启动它们?

有。将它们存储在列表中,不要在循环中使用。它会阻塞

从文档中:

与进程交互:向stdin发送数据。从stdout和stderr读取数据,直到到达文件末尾等待进程终止。可选的输入参数应该是要发送到子进程的字符串,如果不应该向子进程发送数据,则应该是None

所以结果应该是这样的:

# list to store processes after creating them
prcoesses = list()

for root, directory, file in os.walk(dir):
    for name in file:
        input_file = open(os.path.join(root, name))
        input_text = input_file.read().encode('utf-8')
        input_file.close()

        command = "python process.py"
        process = subprocess.Popen(command.split(),
                                   shell=False,
                                   stdin=subprocess.PIPE)
        processes.append(process)

        process.stdin.write(input_text)
        log.debug("Process started with pid {0}".format(process.pid))
        # process.communicate()

 # wait for processes to complete
 for process in processes:
     stdoutdata, stderrdata = process.communicate()
     # ... do something with data returned from process

要限制进程数量,您可能需要使用模块提供的。

是。将它们存储在列表中,不要在循环中使用。它会阻塞

从文档中:

与进程交互:向stdin发送数据。从stdout和stderr读取数据,直到到达文件末尾等待进程终止。可选的输入参数应该是要发送到子进程的字符串,如果不应该向子进程发送数据,则应该是None

所以结果应该是这样的:

# list to store processes after creating them
prcoesses = list()

for root, directory, file in os.walk(dir):
    for name in file:
        input_file = open(os.path.join(root, name))
        input_text = input_file.read().encode('utf-8')
        input_file.close()

        command = "python process.py"
        process = subprocess.Popen(command.split(),
                                   shell=False,
                                   stdin=subprocess.PIPE)
        processes.append(process)

        process.stdin.write(input_text)
        log.debug("Process started with pid {0}".format(process.pid))
        # process.communicate()

 # wait for processes to complete
 for process in processes:
     stdoutdata, stderrdata = process.communicate()
     # ... do something with data returned from process

要限制进程数量,您可能需要使用模块提供的。

是。将它们存储在列表中,不要在循环中使用。它会阻塞

从文档中:

与进程交互:向stdin发送数据。从stdout和stderr读取数据,直到到达文件末尾等待进程终止。可选的输入参数应该是要发送到子进程的字符串,如果不应该向子进程发送数据,则应该是None

所以结果应该是这样的:

# list to store processes after creating them
prcoesses = list()

for root, directory, file in os.walk(dir):
    for name in file:
        input_file = open(os.path.join(root, name))
        input_text = input_file.read().encode('utf-8')
        input_file.close()

        command = "python process.py"
        process = subprocess.Popen(command.split(),
                                   shell=False,
                                   stdin=subprocess.PIPE)
        processes.append(process)

        process.stdin.write(input_text)
        log.debug("Process started with pid {0}".format(process.pid))
        # process.communicate()

 # wait for processes to complete
 for process in processes:
     stdoutdata, stderrdata = process.communicate()
     # ... do something with data returned from process

要限制进程数量,您可能需要使用模块提供的。

是。将它们存储在列表中,不要在循环中使用。它会阻塞

从文档中:

与进程交互:向stdin发送数据。从stdout和stderr读取数据,直到到达文件末尾等待进程终止。可选的输入参数应该是要发送到子进程的字符串,如果不应该向子进程发送数据,则应该是None

所以结果应该是这样的:

# list to store processes after creating them
prcoesses = list()

for root, directory, file in os.walk(dir):
    for name in file:
        input_file = open(os.path.join(root, name))
        input_text = input_file.read().encode('utf-8')
        input_file.close()

        command = "python process.py"
        process = subprocess.Popen(command.split(),
                                   shell=False,
                                   stdin=subprocess.PIPE)
        processes.append(process)

        process.stdin.write(input_text)
        log.debug("Process started with pid {0}".format(process.pid))
        # process.communicate()

 # wait for processes to complete
 for process in processes:
     stdoutdata, stderrdata = process.communicate()
     # ... do something with data returned from process

要限制进程数量,您可能需要使用模块提供的解决方案。

如果我将所有进程都放在列表中,您的解决方案会起作用,但有没有办法控制运行进程的数量?我的意思是,若我有50个文件要处理,但我一次只想要10个?谢谢,经过一番斗争,我找到了如何从池中运行进程的解决方案。仍然没有管理如何在池上进行惰性迭代。这可能不是您想要使用池的方式。在这里查看我的答案:您可以尝试阅读更多关于使用多处理标记的questinos的答案,这些是我的:如果我将所有进程都放在列表中,您的解决方案是有效的,但是有什么方法可以控制运行进程的数量吗?我的意思是,若我有50个文件要处理,但我一次只想要10个?谢谢,经过一番斗争,我找到了如何从池中运行进程的解决方案。仍然没有管理如何在池上进行惰性迭代。这可能不是您想要使用池的方式。在这里查看我的答案:您可以尝试阅读更多关于使用多处理标记的questinos的答案,这些是我的:如果我将所有进程都放在列表中,您的解决方案是有效的,但是有什么方法可以控制运行进程的数量吗?我的意思是,若我有50个文件要处理,但我一次只想要10个?谢谢,经过一番斗争,我找到了如何从池中运行进程的解决方案。仍然没有管理如何在池上进行惰性迭代。这可能不是您想要使用池的方式。在这里查看我的答案:您可以尝试阅读更多关于使用多处理标记的questinos的答案,这些是我的:如果我将所有进程都放在列表中,您的解决方案是有效的,但是有什么方法可以控制运行进程的数量吗?我的意思是,若我有50个文件要处理,但我一次只想要10个?谢谢,经过一番斗争,我找到了如何从池中运行进程的解决方案。仍然没有管理如何在池上进行惰性迭代。这可能不是您想要使用池的方式。在这里查看我的答案:您可以尝试在使用多处理标签的questinos上阅读更多答案,这些是我的: