Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 进程与子进程之间的通信_Python_Python 2.7_Multiprocessing - Fatal编程技术网

Python 进程与子进程之间的通信

Python 进程与子进程之间的通信,python,python-2.7,multiprocessing,Python,Python 2.7,Multiprocessing,我已经编写了一个小的多进程程序,并期待着订单将 沿着这条路走 hello number ls -l <output> hello号码 ls-l 但它没有起作用。所以我相信父进程不知道子进程。 主进程如何等待完成子进程。或者我错过了最基本的东西 多处理的概念 #!/usr/bin/env python import multiprocessing import subprocess def run_command(): pipe = subprocess.Popen("l

我已经编写了一个小的多进程程序,并期待着订单将 沿着这条路走

hello number
ls -l <output>
hello号码
ls-l
但它没有起作用。所以我相信父进程不知道子进程。 主进程如何等待完成子进程。或者我错过了最基本的东西 多处理的概念

#!/usr/bin/env python
import multiprocessing
import subprocess

def run_command():
    pipe = subprocess.Popen("ls -l", stdout=subprocess.PIPE,
                                    stderr=subprocess.PIPE,
                                    shell=True)
    out, err = pipe.communicate()
    pipe.wait()
    print out, err

def msg(number):
    print "hello %s" %(number)
    run_command()

def main():
    print "yes"
    procs = []
    for i in range(0, 100, 1):
        process = multiprocessing.Process(target=msg, args=(i,))
        procs.append(process)
    for proc in procs:
        proc.start()
    for proc in procs:
        proc.join()

if __name__ == "__main__":
    main()

Expected code:
hello 0
total 4
-rw-rw-r-- 1 goswamia <#> 682 Apr  6 02:51 check_process.py

hello 1
total 4
-rw-rw-r-- 1 goswamia <#> 682 Apr  6 02:51 check_process.py

etc
#/usr/bin/env python
导入多处理
导入子流程
def run_命令():
pipe=subprocess.Popen(“ls-l”,stdout=subprocess.pipe,
stderr=子流程.PIPE,
shell=True)
out,err=pipe.communicate()
等一下
打印出来,呃
def msg(编号):
打印“hello%s”%(数字)
运行_命令()
def main():
打印“是”
过程=[]
对于范围(0、100、1)内的i:
process=multiprocessing.process(target=msg,args=(i,))
进程追加(进程)
对于进程中的进程:
程序启动()
对于进程中的进程:
proc.join()
如果名称=“\uuuuu main\uuuuuuuu”:
main()
预期代码:
你好,0
总数4
-rw-rw-r--1戈斯瓦米亚682年4月6日02时51分检查
你好1
总数4
-rw-rw-r--1戈斯瓦米亚682年4月6日02时51分检查
等
获取输出: python check_process.py

yes
hello 0
hello 1
hello 2
hello 3
hello 4
total 4
-rw-rw-r-- 1 goswamia <#> 682 Apr  6 02:51 check_process.py

total 4
-rw-rw-r-- 1 goswamia <#> 682 Apr  6 02:51 check_process.py

total 4
-rw-rw-r-- 1 goswamia <#> 682 Apr  6 02:51 check_process.py

total 4
-rw-rw-r-- 1 goswamia <#> 682 Apr  6 02:51 check_process.py

total 4
-rw-rw-r-- 1 goswamia <#> 682 Apr  6 02:51 check_process.py
是
你好,0
你好1
你好2
你好3
你好4
总数4
-rw-rw-r--1戈斯瓦米亚682年4月6日02时51分检查
总数4
-rw-rw-r--1戈斯瓦米亚682年4月6日02时51分检查
总数4
-rw-rw-r--1戈斯瓦米亚682年4月6日02时51分检查
总数4
-rw-rw-r--1戈斯瓦米亚682年4月6日02时51分检查
总数4
-rw-rw-r--1戈斯瓦米亚682年4月6日02时51分检查

似乎没有使用管道。等待()

已编辑:未放置管道。等待()您应该放置管道。等待() 就像这个编辑过的代码

#!/usr/bin/env python
import multiprocessing
import subprocess


def msg(number):
    # this command for sub process
    pipe = subprocess.Popen("ls -l", stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)

    # this command that runing in main process
    out, err = pipe.communicate()
    print "hello %s" %(number)
    print out, err

    # this make sub prosses waits for the command in main process to finish
    pipe.wait()

def main():
    print "yes"
    procs = []
    for i in range(0, 5, 1):
        process = multiprocessing.Process(target=msg, args=(i,))
        procs.append(process)
    for proc in procs:
        proc.start()
    for proc in procs:
        proc.join()

if __name__ == "__main__":
    main()
这是您编辑的代码

#!/usr/bin/env python
import multiprocessing
import subprocess


def msg(number):
    # this command for sub process
    pipe = subprocess.Popen("ls -l", stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)

    # this command that runing in main process
    out, err = pipe.communicate()
    print "hello %s" %(number)
    print out, err

    # this make sub prosses waits for the command in main process to finish
    pipe.wait()

def main():
    print "yes"
    procs = []
    for i in range(0, 5, 1):
        process = multiprocessing.Process(target=msg, args=(i,))
        procs.append(process)
    for proc in procs:
        proc.start()
    for proc in procs:
        proc.join()

if __name__ == "__main__":
    main()
那份订单会跟在你的后面

hello number
ls -l <output>
hello号码
ls-l
其他人已经解释了这一点


您的第一个代码是在单独的进程中执行的,输出是无序的,因为后台进程和前台进程也是单独的进程。

我能出来,但不能理解下面这行。如果我评论输出的顺序不正确,它到底在做什么

psutil.Process(proc.pid).children()(无法理解此内容)


与先启动每个流程,然后等待每个流程完成不同,您必须先等待每个流程完成,然后再启动下一个流程。只需删除procs:中proc的第二个
。但是,多处理的整个概念似乎毫无意义。如果进程创建子进程,我想让子进程完成并执行并行工作,我如何处理这种情况?并行工作是在
开始
加入
之间完成的。是的,进程调用另一个功能。我想等待完成这样的函数我在代码中使用了pipe.wait(),我不能将这两个函数组合到调用另一个工具并执行其他操作的进程中。如果可能的话,您可以在主进程内运行多进程和子进程,而子进程正在等待其父进程(主进程)。您可以在这里的python文档中阅读更详细的信息