我的问题:现在使用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
,则固定迭代)循环:
- 试图从队列中拉动任务(如果没有可用,则阻止)
- 处理任务
- 将结果发送回父
- goto 1
直到完成旧任务之前,它才试图拉新任务,因此,如果一个工人得到便宜的任务,它将做更多的任务。只要任务可用,就不会固定闲置。是的,它正是您想要的。这不是Round Robin或其他静态工作分配方案,可能会使工人闲置,而其他工人则超过了多个任务。设置chunksize
可以创建该效果,但是在这种情况下,更多的是将每个"块"算作一个任务;块然后按需分配,而不是单个任务。