def get_fstates(decay): global db global br_cutoff if decay['branching'] < br_cutoff: return if decay['branching'] > 1: return if len(decay['products'])>max_decay_chain: return if len(decay['products'])<1: return #print decay['history'], decay['products'] db_dec = Decay(father = decay['father'], scheme = decay['history'], branching = decay["branching"], fstate = ' '.join(decay['products'])).order_history() #db_dec.printdecay() try: db_dec.save() except: #print "Failed to save decay!" #db_dec.printdecay() return #try: # #print json.dumps(decay, sort_keys=True, indent=4) # fstates.insert({ # 'scheme': decay['history'], # 'branching': decay['branching'], # 'fstate': ' '.join(decay['products']), # 'father': decay['father'] # }) #except pymongo.errors.DuplicateKeyError: # return #if not 1 <= len(decay['products']) <= max_decay_chain: # Not full db build #if len(decay['products']) == 1: # Full DB build # return for p in decay['products']: if not p in db: continue for k in db[p]: work_copy = deepcopy(decay) work_copy['products'].remove(k['father']) work_copy['products'] += k['products'] history = work_copy['history'].split('; ') + \ ["{} --> {}".format(k['father'], ' '.join(k['products']))] work_copy['history'] = '; '.join(history[:1] + sorted(history[1:])) work_copy['branching'] *= k['branching'] get_fstates(work_copy)
def get_fstates(decay): global db global br_cutoff if decay['branching'] < br_cutoff: return if decay['branching'] > 1: return if len(decay['childs'])>max_decay_chain: return if len(decay['childs'])<1: return #print decay['history'], decay['products'] db_dec = Decay(parent = decay['parent'], childs = decay['childs'], branching = decay["branching"]) #db_dec.printdecay() #db_dec.save() try: db_dec.save() except: print "Failed to save decay!" db_dec.printdecay() return
work_copy = deepcopy(decay) #work_copy['history'] = "{} --> {}".format( # parent, ' '.join(decay['products'])) get_fstates(work_copy) end = datetime.now() print "{}\t{}".format(parent, end-start) if __name__ == "__main__": from fstate import get_fstates #from fstate import get_fstates connect(db_name) Decay.objects().delete() #fstates.drop() #fstates.create_index("fstate") #fstates.create_index("scheme", unique=True) #do_work(test_set['decays'].keys()) print "DB build started on {}.".format(datetime.now()) start = datetime.now() workers = cpu_count() p = Pool(processes=workers) p.map(do_work, get_jobs(workers))