python的subprocess基本

先在同一个文件夹下创建两个.py文件。

第一个:13.py

# -*- coding: utf-8 -*-
__author__ = "YuDian"
'''
    multiprocessing->Pool进程池。
    file name:13.py
'''
from multiprocessing import Pool
import os, time, random


def long_time_task(name):
    print('Run task %s (%s)...' % (name, os.getpid()))
    start = time.time()
    time.sleep(random.random() * 3)
    end = time.time()
    print('Task %s runs %0.2f seconds.' % (name, (end - start)))


if __name__ == '__main__':
    print('Parent process %s.' % os.getpid())
    print('父进程的父进程:(也就是打开这个文件的进程):',os.getppid())
    p = Pool(9)     # pool()可以指定同时运行的进程数。如果缺省,默认为该电脑的CPU核数。如果赋值超过CPU核数,按照CPU核数。
    for i in range(11):    # range()内的范围可以任意指定,为运行的进程总数。
        p.apply_async(long_time_task, args=(i,))
    print('Waiting for all subprocesses done...')
    p.close()
    p.join()
    print('All subprocesses done.')

第二个: 14.py

 1 import subprocess
 2 import os
 3 '''
 4     开一个子进程,并对子进程通信。参考:http://blog.csdn.net/seetheworld518/article/details/48805261
 5 file name:14.py
 6 '''
 7 
 8 class Shell(object):
 9     def runCmd(self, cmd):
10         res = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
11         print('本程序的进程2:',os.getpid())
12         print('用res.pid得到的就是这个的子进程,也就是13.py的父进程',res.pid)
13         sout, serr = res.communicate('13.py\n')
14         print('本程序的进程3:',os.getpid())
15         return res.returncode, sout, serr, res.pid
16 
17 print('本程序的进程1:',os.getpid())
18 shell = Shell()
19 result=shell.runCmd('python F:/python_codes/learn_python_of_simple_codes/demos/13.py')
20 print(result[1].decode('utf-8'))

最后输出为:

本程序的进程1: 13928
本程序的进程2: 13928
用res.pid得到的就是这个的子进程,也就是13.py的父进程 6908
本程序的进程3: 13928
Parent process 8720.
父进程的父进程:(也就是打开这个文件的进程): 6908
Waiting for all subprocesses done...
Run task 0 (15352)...
Run task 1 (7832)...
Run task 2 (11824)...
Run task 3 (3140)...
Run task 4 (12572)...
Run task 5 (18808)...
Run task 6 (9284)...
Run task 7 (17996)...
Run task 8 (1996)...
Task 5 runs 0.33 seconds.
Run task 9 (18808)...
Task 6 runs 0.63 seconds.
Run task 10 (9284)...
Task 7 runs 1.27 seconds.
Task 10 runs 0.90 seconds.
Task 2 runs 2.32 seconds.
Task 9 runs 2.07 seconds.
Task 0 runs 2.46 seconds.
Task 1 runs 2.47 seconds.
Task 4 runs 2.51 seconds.
Task 3 runs 2.58 seconds.
Task 8 runs 2.82 seconds.
All subprocesses done.

 

posted on 2018-03-21 16:46  我是人间惆怅客1  阅读(148)  评论(0)    收藏  举报

导航