def traceroute_worker(self, q):
proc, tracefile = q.get()
while True:
if proc.poll() is not None:
map_traceroute(tracefile)
q.task_done()
break
time.sleep(5)
def do_traceroute(self, peers):
sites = []
for p in peers:
sites.append(p[0][0])
print sites
q = Queue()
for i in range(50):
t = Thread(target=self.traceroute_worker, args=(q))
t.setDaemon(True)
t.start()
for item in sites:
out = open('some-file', 'w')
q.put(Popen(['/usr/bin/traceroute', item], stdout=out))
q.join() # block until all tasks are done
|