python学习中的多进程总结
多进程
跨平台实现多进程需要用到multiprocessing这个模块,这个模块中有两个类Process和Pool是常用的。
Process类
1 | | __init__(self, group=None, target=None, name=None, args=(), kwargs={}, *,mon=None) |
将输入,输出和err都用subprocess的管道来传输。调用:su.communicate([stdin])返回一个tuple或者用两个变量来接收(第一个变量接收stdout传来的值,第二个变量接收stderr传来的值)。
communicate()传参问题:如果运行的外部命令或者程序需要交互才用communicate来传参数,且Popen中stdin必须是subprocess的管道。也可以用su.stdin.write()来给外部程序传入参数,读取命令返回值也可以用su.stdout.read()
multiprocessing提供的Queue
实例化:q = Queue()
获取数据:q.get(True)
传入数据:q.put(value)
注意点
A.Queue()只能用于进程间的通信,子进程与父进程的通信试用subprocess比较好
B.Queue()不能用于进程池的进程间通信,进程池的进程间通讯要用multiprocessing.Manager().Queue()参考代码如下:
1 | #!/usr/bin/python |