Beispiel #1
0
    def run(self, fastani_verification, genomes):
        """Using the instance defined number of CPUs, run FastANI."""

        manager = multiprocessing.Manager()
        out_q = manager.dict()
        procs = []
        nprocs = self.cpus

        for item in splitchunks(fastani_verification, nprocs):
            p = multiprocessing.Process(target=self._fastaniWorker,
                                        args=(item, genomes, out_q))
            procs.append(p)
            p.start()

        # Wait for all worker processes to finish
        for p in procs:
            p.join()
            if p.exitcode == 1:
                raise FastANIException(
                    "A process returned a non-zero exit code.")

        all_fastani_dict = dict(out_q)

        return all_fastani_dict
Beispiel #2
0
    def align_marker_set(self, db_genome_ids, marker_set_id):
        manager = multiprocessing.Manager()
        out_q = manager.Queue()
        procs = []
        nprocs = self.threads
        for item in splitchunks(db_genome_ids, nprocs):
            p = multiprocessing.Process(target=self._worker,
                                        args=(item, out_q, marker_set_id))
            procs.append(p)
            p.start()

        # Collect all results into a single result dict. We know how many dicts
        # with results to expect.
        while out_q.empty():
            time.sleep(1)

        # Wait for all worker processes to finish
        results = {}

        for i in range(len(db_genome_ids)):
            gid, sequence = out_q.get()
            results[gid] = sequence

        return results
Beispiel #3
0
 def test_splitchunks(self):
     test_dict = {'k1': 'v1', 'k2': 'v2',
                  'k3': 'v3', 'k4': 'v4'}
     my_gen = tools.splitchunks(test_dict, 2)
     self.assertEqual(len(next(my_gen)), 2)