Python 多处理和 ctype 数组

Python Multiprocessing & ctype arrays

我正在尝试对一个文件做一些工作,该文件中有各种数据,我正在以 string/raw 格式提取它,然后处理字符串。

我正在尝试使进程成为多线程的,这样我就可以同时处理多个块,但是当然文件非常大,有几千兆字节,所以内存是个问题。

进程不需要修改输入数据,因此它们不需要自己的副本。但是,我不知道如何在 Python 2.7.

中将字符串数组作为 ctype

目前我有:

import multiprocessing, ctypes
from multiprocessing.sharedctypes import Value, Array

with open('test.txt', 'r') as fin:
    rawdata = Array('c', fin.readlines(), lock=False)

但这并没有像我希望的那样工作,它将整个事物视为一个巨大的 char 缓冲区数组并且失败了,因为它需要一个字符串对象。我需要能够提取原始行并使用现有的 python 代码来检查行的内容并执行一些操作,这些操作从子字符串匹配到从中提取整数和浮点值用于数学运算的字符串。有什么明智的方法可以实现我所缺少的吗?也许我使用了错误的项目(数组)来将数据推送到共享的 c 格式?

您希望您的字符串最终成为 Python 字符串,还是 C 风格的字符串 a.k.a。空终止字符数组?如果您正在使用 python 字符串处理,那么只需将文件读入非 ctypes python 字符串并在任何地方使用它都是可行的方法 - python 不会复制默认情况下是字符串,因为它们无论如何都是不可变的。如果你想使用 c 风格的字符串,那么你会想要使用 ctypes 分配一个字符缓冲区,并使用 fin.readinto(buffer)。