Run two processes in parallel in Python

I try to execute two commands in parallel for 10 seconds using the following code snippet, but the whole process takes more than 10 seconds, as you can see in the output. Could you help me better understand the reason and the best solution for this issue.

stime = datetime.datetime.now() print stime commands = ("sudo /usr/local/bin/snort -v -u snort -g snort -c /usr/local/snort/etc/snort.conf -i eth0 &", "sudo gedit test") for p in commands: p = subprocess.Popen(shlex.split(p), stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.STDOUT) class Alarm(Exception): pass def alarm_handler(signum, frame): raise Alarm signal.signal(signal.SIGALRM, alarm_handler) signal.alarm(10) #in seconds try: stdoutdata, stderrdata = p.communicate() signal.alarm(0) #reset the alarm except Alarm: print 'Ooops, taking too long!!!!' etime = datetime.datetime.now() print etime 

And the conclusion:

 2013-01-08 03:30:00.836412 Ooops, taking too long!!!! 2013-01-08 03:30:16.548519 
+4
source share
2 answers

It seems to me that threading.Timer might be more appropriate:

 from threading import Timer from subprocess import Popen,PIPE import shlex import datetime import sys jobs = ['sleep 100','sleep 200'] timers = [] processes = [] print datetime.datetime.now() for job in jobs: p = Popen(shlex.split(job),stdout = PIPE) t = Timer(10,lambda p=p: p.terminate()) t.start() timers.append(t) processes.append(p) for t in timers: t.join() stdout,stderr = processes[0].communicate() stdout,stderr = processes[1].communicate() print datetime.datetime.now() 
+2
source
 import multiprocessing import subprocess import shlex import time commands = ("echo -n HI-FIRST ", "echo -n HI-SECOND ") def parallel(): p = subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.STDOUT) stdoutdata, stderrdata = p.communicate() print stdoutdata + "\t" + time.ctime() for cmd in commands: p = multiprocessing.Process(target=parallel) p.start() 

Output:

 $ python stack.py HI-FIRST Fri Jan 11 08:47:18 2013 HI-SECOND Fri Jan 11 08:47:18 2013 
+1
source

All Articles