python3中的并行for循环

时间:2019-04-11 10:30:38

标签: python-3.x parallel-processing

structure optimization loop需要一个阻塞,因为我需要迭代几次(从for循环中可以明显看出),所以我希望“ loop over elements”继续进行。也就是说,当structure optimization loop以及随后的loop on magnetic state for each combo正在串行等待时,我希望从最外面的loop over elements开始有4个这样的实例。

我能做到吗?

def main():

  # loop over elements    
  for ds in delem:
    for ps in pelem:
      for cs in celem:    # THIS LOOP SHOULD BE PARALLEL
        latpar = (lats[delem.index(ds)])

        dstr = ds+"-"+ps+"-"+cs
        os.makedirs(dstr, exist_ok=True)
        os.chdir(dstr)

        # loop on magnetic state for each combo
        # THIS LOOP SHOULD ALSO WAIT
        # FOR THE NEXT LOOP
        for mstate in magstate:
          os.makedirs(mstate, exist_ok=True)
          mdir = magstate.index(mstate)
          string = ds+"-"+ps+"-"+cs+"-"+mstate.upper()
          print(string)
          os.chdir(mstate)
          genpos(float(latpar))
          genincar(mdir,string)
          shutil.copy2(os.path.join(root,"KPOINTS"),".")
          genpot(ds,ps,cs)
          gensub(string)
         # Structure optimization loop
          for sstate in optstate:
            #  genincar2(sdir)
            shutil.copy2("INCAR.main","INCAR")
            subprocess.call(scfc)
            time.sleep(5)
            while True:
              jobnum=int(subprocess.getoutput("qselect -u rudrab|wc -l"))
              print(str(jobnum)+" jobs still running")
              time.sleep(30)
              if jobnum < 1:
                with open("log","a") as flog:
                  flog.write(str(string)+ " submitted on "+time.strftime("%d/%m/%Y"+" at "+"%H:%M:%S")+"\n")
                break

            #  os.makedirs(sstate, exist_ok=True)
            sdir = optstate.index(sstate)
            print(sstate)
            genincar2(sdir)
            shutil.copy2("INCAR", "INCAR"+"."+str(sstate))
            shutil.copy2("CONTCAR", "POSCAR")
            shutil.copy2("CONTCAR", "CONTCAR"+"."+str(sstate))
            shutil.copy2("OUTCAR", "OUTCAR"+"."+str(sstate))

          os.chdir("..")
        os.chdir(root)

0 个答案:

没有答案