Python多处理和ctype数组

时间:2018-08-01 18:41:28

标签: python arrays multiprocessing ctypes

我正在尝试对文件进行一些处理,文件中包含各种数据,然后以字符串/原始格式将其拉出,然后再处理字符串。

我正在尝试使该进程成为多线程,因此我可以一次处理多个块,但是当然文件很大,几个GB,所以内存是个问题。

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

1 个答案:

答案 0 :(得分:1)

您是否希望字符串最终以Python字符串或c样式字符串(又称为空终止字符数组)结尾?如果您正在使用python字符串处理,则只需将文件读取为非ctypes python字符串,然后在各处使用它就可以了-python默认情况下不会复制字符串,因为它们始终是不可变的。如果要使用c样式的字符串,则需要使用ctypes分配字符缓冲区,并使用fin.readinto(buffer)。