2012-05-30 3 views
0

Я создаю множество процессов и запускаю инструменты в каждом из них. Когда я пытаюсь остановить инструментарий непосредственно перед выходом из системы, программа инструментов, похоже, виснет в оболочке, как будто процесс уже завершен, и у него нет процесса остановки инструментария. Вот код:остановка контрольно-измерительной аппаратуры в 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

Я решил проблему callgrind_control висит с помощью call вместо system, с параметром 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() 
Смежные вопросы