import multiprocessingdef send_request(data): lock.acquire() print(data,' ',os.getpid()) lock.release()def init(l): global lock lock = lif __name__ == '__main__': data_list = ['data1', 'data2', 'data3'] lock = multiprocessing.Lock() pool = multiprocessing.Pool(8, initializer=init, initargs=(lock,),maxtasksperchild=1) pool.map(send_request, range(10000)) pool.close() pool.join()程序的部分输出如下9995 158249996 158249997 158249998 158249999 15824根据maxtasksperchild的设置,应该是每个进程只执行一个任务,为什么输出显示一个进程执行了多个任务。但是,当我将语句从 更改为 时pool.map(send_request, range(10000)),pool.map(send_request, range(9))输出显示 maxtasksperchild 设置正常。0 117761 54242 109843 158484 110005 167286 44807 120168 12936Pythonpython-多处理
2 回答

潇湘沐
TA贡献1816条经验 获得超6个赞
简而言之,多处理是一组多个输入参数,出于性能原因task
,这些参数一起发送(按大小批量发送)。chunksize
因此,worker 最多将执行maxtaskperchild * chunksize
函数调用。
可以在pool.map
调用中指定块大小:
pool.map(send_request, range(1000), chunksize=1)
添加回答
举报
0/150
提交
取消