【发布时间】:2014-02-21 23:43:54
【问题描述】:
我正在编写一个程序来处理一个巨大的文件(~1.5GB)。我在具有相当不错的 cpu(8 核)的 Windows 7 计算机上运行 Python 2.7。以任何方式使用多个线程或进程会更有效吗?截至目前,处理整个事情大约需要一个小时。它每秒处理大约 1000 个数据条目,总共处理超过 400 万个。
【问题讨论】:
-
有没有一种简单的方法可以从文件的中途开始? (取决于文件结构)处理文件的某些部分是否依赖于其他部分?如果您可以划分输入,并且每个部分都是独立的,那么您可能会通过将其分成最多(2 * 个核心)部分来受益。
-
如果你是cpu绑定的,那么也许吧。
-
@HughBothwell 每个节点都是独立的,但我无法从文件中途开始,因为我正在使用 pickle 将其加载到字典中。我可能会尝试拆分它。你能解释一下为什么我会把它分成 2 * 核心 (16) 块,而不是每个核心 (8) 块吗?
-
@ethg242:因为,在给定的核心上,如果一个线程被延迟,另一个线程可能能够利用空闲周期。不能保证,只有分析会告诉你什么是最好的,但这通常是有意义的最大进程数(取决于你的瓶颈所在)。
-
至少您应该有一个(或多个基于其他 cmets)线程来读取数据,而另一个线程处理您的数据。每次您调用 read() (或您用来读取的任何方法)时,系统都会在后台稍微休眠(等待磁盘),并且您要确保使用该时间来做有用的工作(前提是有有用的工作要做)。
标签: python multithreading python-2.7 multiprocessing data-processing