我正在尝试对一个文件进行一些处理,该文件中有各种数据,我以string/raw格式提取它,然后处理字符串。
我正在努力使进程成为多线程的,这样我就可以同时处理几个块,但文件当然很大,有几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)
但这并没有像我希望的那样起作用,它将整个事情视为一个巨大的char缓冲区数组,并因为想要一个字符串对象而失败。我需要能够提取原始行,并使用现有的python代码来处理它们,该代码检查行的内容并执行一些操作,从子字符串匹配到从字符串中提取整数值和浮点值进行数学运算。有什么明智的方法可以实现我所错过的目标吗?也许我使用了错误的项(Array(,将数据推送到共享的c格式?
您希望字符串最终成为Python字符串,还是c样式字符串,也就是以null结尾的字符数组?如果您正在处理python字符串,那么只需将文件读取到非ctypes python字符串中,并在任何地方使用它就可以了——默认情况下,python不会复制字符串,因为它们无论如何都是不可变的。如果要使用c样式字符串,则需要使用ctypes分配字符缓冲区,并使用fin.readinto(buffer(.