Hi, 各位大哥
最近在看 python subprocess 模块的时候产生了一点疑问,因此上 V2 求助,希望得到各位帮助
问题来源:
在 Python 中利用 subprocess 很容易就能调用一个子进程,如下:
from multiprocessing import Process
import os
def subpro():
print 'there is a sub process which pid is %s' %os.getpid()
if __name__ == '__main__':
p=Process(target=subpro, name='process_start_test')
p.start()
print 'there is a parent process which pid id %s' %os.getpid()
那么从官方文档看这个模块的说明,在实例化 Process 这个类的时候如果不传入参数 target 的话,执行 start 方法会调用 Process 类里的 run 方法
但是小弟不才,琢磨了半天 subprocess 源码,愣是看不出 start 方法在没有 target 属性是如何调用 run 方法的,以下为节选 subprocess 代码
def run(self):
'''
Method to be run in sub-process; can be overridden in sub-class
'''
if self._target:
self._target(*self._args, **self._kwargs)
def start(self):
'''
Start child process
'''
assert self._popen is None, 'cannot start a process twice'
assert self._parent_pid == os.getpid(), \
'can only start a process object created by current process'
assert not _current_process._daemonic, \
'daemonic processes are not allowed to have children'
_cleanup()
if self._Popen is not None:
Popen = self._Popen
else:
from .forking import Popen
self._popen = Popen(self)
_current_process._children.add(self)
希望能得到大家的帮助,谢谢各位观看
1
SErHo 2015-12-06 23:13:46 +08:00 1
|
2
raingolee OP 不好意思,标题写错了,应该是 multiprocess 模块,丢人。。。
|