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, window_size): 12 master_index = {} 13 14 # Start indexing. 15 16 for i in range(0, len(filenames), window_size): 17 channels = [] 18 for filename in filenames[i:i + window_size]: 19 channels.append(start(apply_indexer, filename)) 20 21 # Start listening for responses. 22 23 exchange = Exchange(channels) 24 while len(channels) > 0: 25 print "Waiting for %d channels..." % len(channels) 26 for channel in exchange.ready(): 27 index = channel.receive() 28 update(master_index, index) 29 channels.remove(channel) 30 31 # Provide a search interface. 32 33 return Searcher(master_index) 34 35 if __name__ == "__main__": 36 import sys 37 window_size, filenames = int(sys.argv[1]), sys.argv[2:] 38 searcher = get_searcher(filenames, window_size) 39 while 1: 40 print "Pattern:", 41 pattern = raw_input() 42 print searcher.find(pattern) 43 44 # vim: tabstop=4 expandtab shiftwidth=4