![](/img/trans.png)
[英]multiprocessing.Pool returns different length of output compared to the input iterable
[英]multiprocessing.Pool not running on last element of iterable
我正在尝试运行一个函数func
,它接受索引列表作为参数并处理数据。
def func(rng):
**some processing**
write_csv_to_disk(processed_data[rng],mode="a")
import multiprocessing
pool = multiprocessing.Pool(4)
pool.map(func,list_of_lists_of_indices)
pool.close()
该函数以append
模式append
并行处理的部分DataFrame[indices]
保存到文件中。 除了最后一个列表之外,该代码对于list_of_lists_of_indices
所有子列表都运行良好。 针对最后一个列表中索引的数据未保存到我的文件中,并且池已关闭。
list_of_lists_of_indices = [[0,1,2,3,4,.....,99999],[100000,100001,100002,100003,100004,......,199999],.....,[10000000,10000001,...,100000895]]
import multiprocessing
pool = multiprocessing.Pool(4)
pool.map(func,iterable = list_of_lists_of_indices)
pool.close()
好吧,您不是在说write_csv_to_disk
作用,但这里似乎存在一些可能的问题:
此外,虽然Pool.map
的结果是有序的(费用很高),但不能保证它们将按什么顺序执行。 由于是工作人员在写入磁盘,因此没有理由订购这些。 我什至不明白你为什么要使用map
, map
的全部目的是返回计算结果,你在这里没有做
您不应该使用 Pool.map,也不应该“以追加模式保存到文件”。
另请注意, Pool.close
意味着您不会向池提供新工作,它不会等待工作人员完成。 现在理论上,如果您只使用同步方法,那应该无关紧要,但是在这种情况下并给出 (2) 这可能是一个问题:当父进程退出时,池可能会被垃圾收集,这意味着它会被硬关闭游泳池工人。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.