我在数据库中有一个非常大的表(> 20GB)。我想从whith python读取所有行并打印它们。我正在使用SQLite数据库和Python 2.7
我的第一种方法很标准。我可以简单地查询所有行并迭代它们:
cur.execute('SELECT * FROM large_table')
for row in cur:
print row
这可以按预期工作。
出于好奇,我想用multiprocessing.Pool
做同样的工作。
def consumer(data):
print data
cur.execute('SELECT * FROM large_table')
pool = Pool(5)
pool.map(consumer, cur, chunksize=1000)
但这根本不起作用。 .map()
方法似乎试图将完整的iteratable(大型数据库表)加载到RAM中。过了一会儿,我的所有RAM都在使用而没有任何输出。
我是否遗漏了任何内容,或pool.map
只是错误的工具?
干杯, 托拜厄斯
答案 0 :(得分:0)
我错过了什么,或者pool.map只是错误的工具?
是的,您应该使用pool.imap()
代替。在分派到工作进程之前,它不会“消耗”所有值。它应该是代码的简单修复。