code: def make_mashes(fastas, mash_file, threads, kmer = 21, force = False):
      
      mash_processes = set()
      sketches = [fasta + '.msh' for fasta in fastas]
      devnull = open(os.devnull, 'w')
      # Perform the sketching
      for fasta, sketch in zip(fastas, sketches):
          if os.path.isfile(sketch):
              continue
          mash_cmd = ['/opt/bin/bio/mash', 'sketch', '-o', fasta, '-k', str(kmer), fasta]
          mash_processes.add(subprocess.Popen(mash_cmd, stderr=devnull))
          if len(mash_processes) >= threads:
              os.wait()
              mash_processes.difference_update([mp for mp in mash_processes if mp.poll() is not None])
      # Collect stragglers
      for mp in mash_processes:
          if mp.poll() is None:
              mp.wait()
      # Paste sketches into single mash
      paste_mashes(sketches, mash_file, force = force)
      return
docs: Create mash files for multiple fasta files
      Input:
          fastas <list[str]>  -- paths to fasta files
          mash_file <str>     -- path to output mash file
          threads <int>       -- # threads for parallelization
          kmer <int>          -- kmer size for mash sketching
          force <boolean>     -- force overwrite of all mash files