A couple of answers (first, second) have mentioned that subprocess.Popen is a non blocking call. 
What can be a simple example which can validate it or can be used to explain it to a beginner.
I tried the following code. It shows that "Finish" is printed before printing output of ls -lrt but as soon as I add sleep 10 before ls -lrt in command, it waits for command to finish.  
import logging
import os
import subprocess
import signal
import time
log = logging.getLogger(__name__)
class Utils(object):
    @staticmethod
    def run_command(cmnd, env=None, cwd=None, timeout=0):
        p = subprocess.Popen(cmnd, shell=True, stdin=None, bufsize=-1, env=env,
                             stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
                             close_fds=True, cwd=cwd, preexec_fn=os.setsid)
        #stdout_val = p.communicate()[0]
        stdout_val = p.stdout.read()
        return p.returncode, stdout_val.strip()
if __name__ == '__main__':
    print "Start"
    print "Invoke command"
    status, output = Utils.run_command("ls -lrt")   # line - 10
    #status, output = Utils.run_command("sleep 10;ls -lrt") # line - 11
    for i in xrange(10):
        print "Finish"
    print status
    print output
EDIT 1: Replacing call p.communicate() with p.stdout.read() after suggestion.
 
    