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.
浙公网安备 33010602011771号