1 #!/usr/bin/env python 2 3 from parallel import start, Exchange 4 from Dict import Indexer, Searcher, update 5 6 def apply_indexer(channel, filename): 7 print "Indexing", filename 8 indexer = Indexer(filename) 9 channel.send(indexer.get_index()) 10 11 def get_searcher(filenames): 12 master_index = {} 13 14 # Start indexing. 15 16 channels = [] 17 for filename in filenames: 18 channels.append(start(apply_indexer, filename)) 19 20 # Start listening for responses. 21 22 exchange = Exchange(channels) 23 while len(channels) > 0: 24 print "Waiting for %d channels..." % len(channels) 25 for channel in exchange.ready(): 26 index = channel.receive() 27 update(master_index, index) 28 channels.remove(channel) 29 30 # Provide a search interface. 31 32 return Searcher(master_index) 33 34 if __name__ == "__main__": 35 import sys 36 filenames = sys.argv[1:] 37 searcher = get_searcher(filenames) 38 while 1: 39 print "Pattern:", 40 pattern = raw_input() 41 print searcher.find(pattern) 42 43 # vim: tabstop=4 expandtab shiftwidth=4