Python多处理&;ctype数组

Python多处理&;ctype数组,python,arrays,multiprocessing,ctypes,Python,Arrays,Multiprocessing,Ctypes,我试图对一个文件做一些工作,文件中有各种数据,我以字符串/原始格式将其拉入,然后处理字符串 我正在尝试使进程多线程化,这样我就可以同时处理多个块,但当然,文件非常大,几GB,所以内存是个问题 进程不需要修改输入数据,因此它们不需要自己的副本。但是,我不知道如何在Python2.7中将字符串数组作为ctype 目前我有: import multiprocessing, ctypes from multiprocessing.sharedctypes import Value, Array wit

我试图对一个文件做一些工作,文件中有各种数据,我以字符串/原始格式将其拉入,然后处理字符串

我正在尝试使进程多线程化,这样我就可以同时处理多个块,但当然,文件非常大,几GB,所以内存是个问题

进程不需要修改输入数据,因此它们不需要自己的副本。但是,我不知道如何在Python2.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)

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

您希望字符串最终成为Python字符串,还是c样式字符串a.k.a.以null结尾的字符数组?如果您使用的是python字符串处理,那么只需将文件读入一个非ctypes python字符串,并在任何地方使用该字符串即可。默认情况下,python不会复制字符串,因为字符串是不可变的。如果您想使用c样式的字符串,那么您需要使用ctypes分配字符缓冲区,并使用fin.readinto(缓冲区)

好的,缓冲似乎是最好的选择,谢谢。