我正在尝试使用 multiprocessing
模块来处理一个大的 csv 文件。我正在使用 Python 2.7,并按照这里的示例进行操作。
我运行了未修改的代码(为方便起见,以下是复制的代码),发现 worker
函数内的 print
语句不起作用。无法打印输出使得难以理解流程并进行调试。
有人能否解释一下为什么这里不能使用 print
?难道 pool.map 不执行 print 命令吗?我在网上搜索了一番,但没有找到任何相关的文档资料。
import multiprocessing as mp
import itertools
import time
import csv
def worker(chunk):
# `chunk` will be a list of CSV rows all with the same name column
# replace this with your real computation
print(chunk) # <----- nothing prints
print 'working' # <----- nothing prints
return len(chunk)
def keyfunc(row):
# `row` is one row of the CSV file.
# replace this with the name column.
return row[0]
def main():
pool = mp.Pool()
largefile = 'test.dat'
num_chunks = 10
results = []
with open(largefile) as f:
reader = csv.reader(f)
chunks = itertools.groupby(reader, keyfunc)
while True:
# make a list of num_chunks chunks
groups = [list(chunk) for key, chunk in
itertools.islice(chunks, num_chunks)]
if groups:
result = pool.map(worker, groups)
results.extend(result)
else:
break
pool.close()
pool.join()
print(results)
if __name__ == '__main__':
main()
worker
中不起作用(会出现“坏文件描述符”错误)。但我会继续尝试这个思路。 - Roberto