Cone search (parallel version)
#!/usr/bin/python """This example shows how to submit a list of ra,dec positions to SDSS DR5 running 4 in parallel. """ import sys, time import random import math from astrogrid import ConeSearch from astrogrid.threadpool import easy_pool # Define the service endpoint IVORN cone=ConeSearch('ivo://wfau.roe.ac.uk/sdssdr5-dsa/dsa', dsatab='PhotoObjAll') # Generate 20 random positions. # In real astronomy these would be read from a file nsrc=20 ra=[random.random()*math.pi*2*math.degrees(1) for i in range(nsrc)] dec=[(random.random()*math.pi-math.pi/2.)*math.degrees(1) for i in range(nsrc)] radius=[0.001]*nsrc # Define the command to execute and the pool size (4 in parallel) pool = easy_pool(cone.execute) pool.start_threads(4) # Send the commands to the pool for i in range(nsrc): input = (ra[i], dec[i], radius[i]) pool.put(input) # Print information while executing i=0 while 1: p = pool.qinfo() print "Time: %3d sec Queued: %2d Running: %2d Finished: %2d" % \ (i, p[1], nsrc-p[1]-p[3], p[3]) time.sleep(2) i=i+2 if p[3]==nsrc: break pool.stop_threads() # Save results to local disk i=0 for res in pool.get_all(): i = i+1 open('sdss%02d.vot' % i, 'w').write(res)
