def _get_mod_stats_queue( mod_stats_q, mod_conn, out_dir, mod_names, ref_names_and_lens, out_suffix, write_mod_lp, mod_output_fmts, ): def get_mod_site(): # function for profiling purposes return mod_stats_q.get(block=True, timeout=0.01) agg_mod_bn = mh.get_megalodon_fn(out_dir, mh.MOD_NAME) if out_suffix is not None: agg_mod_bn += "." + out_suffix agg_mod_fps = [] if mh.MOD_BEDMETHYL_NAME in mod_output_fmts: agg_mod_fps.append(mods.ModBedMethylWriter(agg_mod_bn, mod_names, "w")) if mh.MOD_VCF_NAME in mod_output_fmts: agg_mod_fps.append( mods.ModVcfWriter( agg_mod_bn, mod_names, "w", ref_names_and_lens=ref_names_and_lens, write_mod_lp=write_mod_lp, )) if mh.MOD_WIG_NAME in mod_output_fmts: agg_mod_fps.append(mods.ModWigWriter(agg_mod_bn, mod_names, "w")) while True: try: mod_sites_batch = get_mod_site() for mod_site in mod_sites_batch: for agg_mod_fp in agg_mod_fps: agg_mod_fp.write_mod_site(mod_site) except queue.Empty: if mod_conn.poll(): break continue while not mod_stats_q.empty(): mod_sites_batch = mod_stats_q.get(block=False) for mod_site in mod_sites_batch: for agg_mod_fp in agg_mod_fps: agg_mod_fp.write_mod_site(mod_site) for agg_mod_fp in agg_mod_fps: agg_mod_fp.close()
def _get_mod_stats_queue(mod_stats_q, mod_conn, out_dir, mod_names, ref_names_and_lens, out_suffix, write_mod_lp, mod_output_fmts): def get_mod_site(): # function for profiling purposes return mod_stats_q.get(block=False) def do_sleep(): # function for profiling purposes sleep(0.001) return agg_mod_bn = mh.get_megalodon_fn(out_dir, mh.MOD_NAME) if out_suffix is not None: agg_mod_bn += '.' + out_suffix agg_mod_fps = [] if mh.MOD_BEDMETHYL_NAME in mod_output_fmts: agg_mod_fps.append(mods.ModBedMethylWriter(agg_mod_bn, mod_names, 'w')) if mh.MOD_VCF_NAME in mod_output_fmts: agg_mod_fps.append( mods.ModVcfWriter(agg_mod_bn, mod_names, 'w', ref_names_and_lens=ref_names_and_lens, write_mod_lp=write_mod_lp)) if mh.MOD_WIG_NAME in mod_output_fmts: agg_mod_fps.append(mods.ModWigWriter(agg_mod_bn, mod_names, 'w')) while True: try: mod_site = get_mod_site() for agg_mod_fp in agg_mod_fps: agg_mod_fp.write_mod_site(mod_site) except queue.Empty: if mod_conn.poll(): break do_sleep() continue while not mod_stats_q.empty(): mod_site = mod_stats_q.get(block=False) for agg_mod_fp in agg_mod_fps: agg_mod_fp.write_mod_site(mod_site) for agg_mod_fp in agg_mod_fps: agg_mod_fp.close() return