我正在Python开发,仍然是游戏的新手,我想确保正确解决此问题。我很乐意接受所有建议。

想象一下,尝试使用跨多个平面文件存储的数据,在许多情况下,组合大小超过20-35 GB。在最普遍的情况下,可以将这些文件界定(CSV,TAB),也可以简单地固定宽度。目的是将这些文件或每个文件的某个子集解析,分析输入(每列代表数据中的变量),然后将其发送到某些目的地(可能是本地或远程SQL,是一个多样性中的其他本地文件输出格式包括文本或某些专有数据格式,例如Stata的.DTA)

目的是使用可用的系统资源以最快的方式进行此操作(我猜是每秒KB吗?)

问题:

  1. 使用编译C进行读取操作是否会提高效率?如果是这样,我应该学习哪个库?而且,C也应该进行解析和输出吗?

  2. 如果该文件以.zip或.gz为单位,是否应该在阅读和写作之前对整个文件进行解压缩,或者您是否将其压缩并使用能够从压缩文件中读取的库?

  3. 程序应该使用多线程吗?我想象读取文件的某些子集(例如一次,n行),解析和输出,例如J线程。很明显,一次读取文件一行是最佳的……似乎最佳的线程和过程数量将取决于可用资源和作业的大小。
    因此,也许该代码应该“智能”足以确定要使用多少线程以及应进行多少工作的工作量。

  4. 一种测量和比较不同方法之间的效率?

  5. 该程序是否应该能够动态执行此操作并根据其性能选择输入输出方法? (将始终严格主导方法B,或在部署环境中进行特质更改)

只是要明确,我愿意接受几乎任何级别的无效率,以换取不可忽略的资源效率的不可忽视

我希望这些问题能为我想找出什么做出清晰的了解。我的编程经验主要仅限于科学/统计套件,因此,如果我的任何问题归结为“ RTM”,请保持温柔并建议使用合适的手册。

有帮助吗?

解决方案

使用编译C进行读取操作是否会提高效率?

并不真地。限制将是I/O带宽,Python使用基础C库。

如果该文件以.zip或.gz为单位,是否应该在阅读和写作之前对整个文件进行解压缩,或者您是否将其压缩并使用能够从压缩文件中读取的库?

首先,让其他一切正常工作。不要试图提前精巧。 Python的Zipfile实现可以通过打开ZIP存档成员而无需扩展它们来处理CSV格式文件。

这更快吗?你不能提前知道。您只能通过构建并测量建造物品来知道。不要握手。这只是几行代码。两者都建立。

程序应该使用多线程吗?

不。

使用OS级多处理。

python something.py source.zip | python part2.py | python part3.py | python part4.py >result

这将是惊人的快速,没有太多工作 - 将使用 全部 可用的操作系统资源。

一种测量和比较不同方法之间的效率?

嗯...这是一个愚蠢的问题。您构建并测量它。经过的时间与其他任何事情一样好。如果您感到困惑,请使用停止手表。严重地。没有魔术。

该程序是否应该能够动态执行此操作并根据其性能选择输入输出方法?

不。

(将始终严格主导方法B,或在部署环境中进行特质更改)

是的。是的。某些方法总是更有效。但是,操作系统非常复杂,因此没有任何代替简单,灵活,组成的设计。

构建可以灵活地重组的简单作品。

不要提前手动。在可能的情况下设计正确的数据结构和算法。当您不能,只选择明智的东西然后继续前进。构建某些东西和调整要比对细节进行烦恼要容易得多,只是发现它们从未重要。

  1. 建立一些东西。

  2. 措施。

  3. 找到瓶颈。

  4. 优化 只要 经过验证的瓶颈。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top