def parallel_apply_bitwise(genotypes, variant_ids, conditions, active_idx, is_and):
"""Run c_apply_bitwise in parallel. Takes the same arguments."""
N = len(genotypes)
nprocs = mp.cpu_count()
pool = mp.Pool(processes=nprocs)
B = round(N/nprocs + 0.5) # batch size
# Split variant_ids in batches (genotype batches are equally-sized, but not
# variant ids, in case a subset was given)
split_at = variant_ids.searchsorted([(k+1)*B+1 for k in range(nprocs-1)])
variant_ids_batches = np.split(variant_ids, split_at)
assert len(variant_ids_batches) == nprocs
# Run one job for each batch
passing = [pool.apply(c_apply_bitwise,
args=(genotypes[k*B:(k+1)*B,:],
variant_ids_batches[k],
conditions, active_idx, is_and, B))
for k in range(nprocs)]
passing = np.concatenate(passing)
pool.close()
return passing
#@timer
评论列表
文章目录