使用python并行上传文件列表的记录到DB

时间:2010-09-27 10:08:23

标签: python multithreading asynchronous

我有一个文件列表,每个文件都有大量的记录分隔\ n, 我需要并行处理这些记录并将它们上传到某个sql server 有人可以提出一个想法是什么是使用python

执行此操作的最佳方法

2 个答案:

答案 0 :(得分:1)

最好的方法可能不是并行上传,而是使用SQL Server批量导入机制 例如
BULK INSERT
bcp

编辑:

如果你需要处理它们,那么我经常使用的方法是 1)将数据批量加载到临时表中 2)处理数据库上的数据
3)插入主表

如果处理的类型合理,可以合并第2和第3阶段。

这可能会更快,因为到服务器的往返次数较少并且处理一组数据而不是逐行处理通常会更快。

此外,我认为SQL服务器将在执行此处理时使用多个CPU,因此您可以免费并行处理

答案 1 :(得分:0)

我会使用游泳池。我举了一个例子。为获得最佳吞吐量,您需要将插入批处理到数据库。一个简单的方法是在python中处理所有记录,然后使用Mark的注释中的BULK INSERT工具来执行插入操作。如果您一次插入一个会慢一些,因为您的程序必须等待网络往返SQL服务器。

from multiprocessing import Pool
import sys

def worker(record):
    print "Processing... %s" % (record)


pool = Pool(processes=8)
for record in sys.stdin:
    pool.apply_async(worker, [record])

pool.close()
pool.join()