2012-05-30 55 views
0

我正在產卵多個進程並在其中的每個進程中啓動儀器。 當我試圖在進程退出前停止檢測時,檢測程序似乎掛在shell中,就好像進程已經結束一樣,並且沒有進程來停止檢測。 下面是代碼:在callgrind中停止使用儀器

from os import system,fork,getpid 
from glob import glob 
from sys import exit 

for filename in glob("py/*.py"): 
    f=fork() 
    if f==0: 
    system("callgrind_control --instr=on "+str(getpid())) 
    execfile(filename,{}) 
    system("callgrind_control --instr=off "+str(getpid())) 
    exit() 

我怎樣才能解決這個問題掛? 我真的需要停止使用儀器嗎?

回答

0

我用call代替system解決callgrind_control掛的問題,與參數shell=True

from os import system,fork,getpid 
from glob import glob 
from subprocess import call 
from multiprocessing import Process 

def caller(filename): 
    pid=getpid() 
    call(["callgrind_control","--instr=on",str(pid)],shell=True) 
    execfile(filename,{}) 
    call(["callgrind_control","--instr=off",str(pid)],shell=True) 

for filename in glob("py/*.py"): 
    p=Process(target=caller,args=(filename,)) 
    p.start() 
    p.join()