What does multiprocessing.pool actually do?



我的问题:现在使用Multiprocessing.pool做什么应该做的?

def create_empty_file(file_name):
#for file in file_name:
#   print(file)
#create a file named based on "file_name" argument if it doesnt exist in library
    file = open(file_name, "x")
    #delay 30 seconds
    time.sleep(30)
    #close the program
    file.close()
#nodes should retrieve the next file to create as soon as one is done

#this will takes in argument as the file name
if __name__ == "__main__":
    #so takes in the argument (names of files) 
    files = sys.argv[1:-1]
    #number of processes
    n_process = int(sys.argv[-1])
    #create pool
    pool = Pool(processes=n_process)
    pool.map(create_empty_file, files)

我的代码可以做应该做的事情,但是我不确定我的代码是否真的按照我的方式工作。

Pool.map本质上是为所有工作过程所绘制的共享多处理队列提供。每个工人运行一个无限的(如果设置了maxtasksperchild,则固定迭代)循环:

  1. 试图从队列中拉动任务(如果没有可用,则阻止)
  2. 处理任务
  3. 将结果发送回父
  4. goto 1

直到完成旧任务之前,它才试图拉新任务,因此,如果一个工人得到便宜的任务,它将做更多的任务。只要任务可用,就不会固定闲置。是的,它正是您想要的。这不是Round Robin或其他静态工作分配方案,可能会使工人闲置,而其他工人则超过了多个任务。设置chunksize可以创建该效果,但是在这种情况下,更多的是将每个"块"算作一个任务;块然后按需分配,而不是单个任务。

相关内容

  • 没有找到相关文章

最新更新