【发布时间】:2017-12-22 14:24:37
【问题描述】:
我想读取内容约为 2GB 的文件,我尝试使用多处理池来执行,但出现错误:
TypeError: 'type' object is not iterable
我知道 map 总是接受可迭代的参数,但有没有办法做到这一点? 到目前为止,这是我的代码:
def load_embeddings(FileName):
#file = open(FileName,'r')
embeddings = {}
i = 0
print "Loading word embeddings first time"
for line in FileName:
# print line
tokens = line.split('\t')
tokens[-1] = tokens[-1].strip()
#each line has 400 tokens
for i in xrange(1, len(tokens)):
tokens[i] = float(tokens[i])
embeddings[tokens[0]] = tokens[1:-1]
print "finished"
return embeddings
if __name__ == "__main__":
t1 = time.time()
p = Pool(processes=5)
FileName = './asag/Resources/EN-wform.w.5.cbow.neg10.400.subsmpl.txt'
file_ = open(FileName,'r')
#fun = partial(load_embeddings,FileName)
result = p.map(load_embeddings, file_)
p.close()
p.join()
print ("Time it took :" + str(time.time() - t1))
【问题讨论】:
-
猜测:只需将文件名(字符串)传递给函数并让它打开文件。 Python
files 不可腌制(无论大小),因此在使用map()时不能作为参数传递。 -
@Lucky 您是否希望使用多个 CPU 读取文件?
-
我已经尝试过了,但是 map 函数至少需要参数,如何解决这个问题?我现在将文件位置直接传递给“load_embeddings”函数。
-
@ABDULNIYASPM 是的,多处理器。我正在处理集群,所以我想使用多个处理器来读取文件以加快处理速度。
标签: python python-2.7 multiprocessing python-multiprocessing