Windows 3中的Python 3中的多线程处理

时间:2012-02-29 14:51:21

标签: python parallel-processing

我有一个用Python编写的数据处理任务,它使用Python CSV读取器读取一个巨大的CSV文件,验证每列中的数据,然后以不同的格式将每一行写入一个新文件。然后将数据批量加载到数据库中。这种新CSV的创建大约需要60分钟,而负载的持续时间则无关紧要。

我想加快CSV的创建,并且由于任务受CPU限制,显而易见的解决方案是尝试并行使用服务器的所有12个内核并处理文件的各个部分。

我已经查看了这里可用的内容:http://wiki.python.org/moin/ParallelProcessing,特别是在Parallel Python库中,这似乎正是我所需要的(http://www.parallelpython.com/content/view/17/31/),但它们似乎都不适用于Python 3 / Windows。

有没有人知道一个满足我需求的并行处理框架,或者有关实现我想要做的最佳方法的任何其他建议?我正在寻找灵活的东西,同时希望避免重新发明轮子或处理凌乱的细节。

1 个答案:

答案 0 :(得分:3)

你可以使用线程,但最后你可能会在GIL中锁定线程。你必须担心锁定。

因此我建议使用内置的multiprocessing模块,特别是“Pool”对象。默认情况下,池将创建与您的计算机具有核心一样多的工作进程。

在主要流程中,创建一个工作池。然后,您可以使用Pool.map_async()Pool.imap()将函数应用于您的所有数据,前提是它是可迭代的形式。 Pool对象会为您跟踪杂乱的细节。