Welcome, guest | Sign In | My Account | Store | Cart
import sys, os, time
from subprocess import Popen, list2cmdline

def cpu_count():
   
''' Returns the number of CPUs in the system
    '''

    num
= 1
   
if sys.platform == 'win32':
       
try:
            num
= int(os.environ['NUMBER_OF_PROCESSORS'])
       
except (ValueError, KeyError):
           
pass
   
elif sys.platform == 'darwin':
       
try:
            num
= int(os.popen('sysctl -n hw.ncpu').read())
       
except ValueError:
           
pass
   
else:
       
try:
            num
= os.sysconf('SC_NPROCESSORS_ONLN')
       
except (ValueError, OSError, AttributeError):
           
pass

   
return num

def exec_commands(cmds):
   
''' Exec commands in parallel in multiple process
    (as much as we have CPU)
    '''

   
if not cmds: return # empty list

   
def done(p):
       
return p.poll() is not None
   
def success(p):
       
return p.returncode == 0
   
def fail():
        sys
.exit(1)

    max_task
= cpu_count()
    processes
= []
   
while True:
       
while cmds and len(processes) < max_task:
            task
= cmds.pop()
           
print list2cmdline(task)
            processes
.append(Popen(task))

       
for p in processes:
           
if done(p):
               
if success(p):
                    processes
.remove(p)
               
else:
                    fail
()

       
if not processes and not cmds:
           
break
       
else:
            time
.sleep(0.05)

commands
= [
   
['curl', 'http://www.reddit.com/'],
   
['curl', 'http://en.wikipedia.org/'],
   
['curl', 'http://www.google.com/'],
   
['curl', 'http://www.yahoo.com/'],
   
['curl', 'http://news.ycombinator.com/']
]
exec_commands
(commands)

Diff to Previous Revision

--- revision 3 2010-08-27 19:17:02
+++ revision 4 2010-08-31 00:11:00
@@ -57,10 +57,10 @@
             time
.sleep(0.05)
 
 commands
= [
-    ['ls', '/bin'],
-    ['ls', '/usr'],
-    ['ls', '/etc'],
-    ['ls', '/var'],
-    ['ls', '/tmp']
+    ['curl', 'http://www.reddit.com/'],
+    ['curl', 'http://en.wikipedia.org/'],
+    ['curl', 'http://www.google.com/'],
+    ['curl', 'http://www.yahoo.com/'],
+    ['curl', 'http://news.ycombinator.com/']
 
]
 exec_commands
(commands)

History