我的问题:我的代码现在是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)
我的代码执行了应该执行的操作,但是我不确定我的代码是否按照要求的方式工作。
答案 0 :(得分:0)
Pool.map
本质上是在馈送所有工作进程都从中共享的共享多处理队列。每个工作程序都会运行一个无限循环(如果设置了maxtasksperchild
,则为固定循环):
在完成旧任务之前,它不会尝试拉出新任务,因此,如果一名工人正在获得廉价任务,它将执行更多任务;只要任务仍然可用,任何工人都不会闲置。所以,是的,它确实可以满足您的要求。这不是轮循或其他静态工作分配方案可能会使工作人员闲置,而其他人却因等待多个任务而超负荷工作。设置chunksize
可以创建该效果,但是在这种情况下,更多的是将每个“块”计为一个任务。然后,这些块将按需分配,而不是按个别任务分配。