【问题标题】:Python for with multiprocess用于多进程的 Python
【发布时间】:2020-09-29 18:39:39
【问题描述】:

此脚本从 txt 文件中读取行并用作我的外部命令的一部分:

for every line in txt do
    os.system(comand)

是否可以使用多进程来提高速度?

    i=0
    x=[]
    for file in os.listdir(carpeta):
     if file.endswith('.json'):
        x.append(file)
        i+=1
    print('the total number of files: ' +str(i))
     
    archivo='./temp.txt'
    strm=open(archivo,encoding='UTF8')
    min=1
    for line in strm:
      if min > i:
        min=1
      origen=args.o+"/"+line.rstrip('\n')
      destino=re.sub("\/(?:.(?!\/))+$","",args.d+"/"+line.rstrip('\n'))
    
      comando=args.r+" copy \""+origen+"\" \""+destino+"\" --drive-service-account-file \""+carpeta+"\\"+str(min)+".json\" --size-only"
      os.system(comando)
      min+=1

【问题讨论】:

    标签: python python-3.x performance optimization multiprocessing


    【解决方案1】:

    您可以使用multiprocessing 从命令列表中启动操作系统进程。

    类似这样的:

    import multiprocessing, os, re
    from multiprocessing import Process, freeze_support
    
    def getcmdlist():
        i=0
        x=[]
        for file in os.listdir(carpeta):
         if file.endswith('.json'):
            x.append(file)
            i+=1
        print('the total number of files: ' +str(i))
         
        archivo='./temp.txt'
        strm=open(archivo,encoding='UTF8')
        min=1
        cmdlist = []
        for line in strm:
            if min > i:
               min=1
            origen=args.o+"/"+line.rstrip('\n')
            destino=re.sub("\/(?:.(?!\/))+$","",args.d+"/"+line.rstrip('\n'))
    
            comando=args.r+" copy \""+origen+"\" \""+destino+"\" --drive-service-account-file \""+carpeta+"\\"+str(min)+".json\" --size-only"
            cmdlist.append(comando)
            min+=1
        return cmdlist
    
    if __name__ == '__main__':
        freeze_support()  # needed for Windows
        cmdlist = getcmdlist()  # all commands
        with multiprocessing.Pool(processes=4) as pool:
            pool.map(os.system, cmdlist)  # pass each command to os process
    

    【讨论】:

    • 我在 multiprocessing.Pool(processes=4) as pool 时收到此错误:NameError: name 'multiprocessing' is not defined
    • 在脚本顶部添加导入。如果需要,安装模块:pypi.org/project/multiprocess
    • 它的工作。非常感谢。我可以放更多进程吗? os.system 消耗的资源很少,有什么限制?
    • 理论上进程数没有限制。这仅取决于您希望一起运行多少个进程以及计算机的功能。如果您不指定进程计数,则将使用您的 CPU 计数。
    猜你喜欢
    • 2011-04-21
    • 1970-01-01
    • 2020-09-02
    • 2018-06-01
    • 1970-01-01
    • 2016-08-20
    • 2015-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多