跳转到主要内容

使用共享内存和零拷贝并行处理大数据集的工具。

项目描述

帕沙

帕沙(parallelized shared memory)提供工具以并行处理数据,重点放在共享内存和零拷贝。它使用类似于Python内置map()函数的映射模式,其中可调用对象应用于集合中的多个元素。为了避免IPC或其它通信方案的高成本,结果被设计为直接写入所有工作者以及调用者共享的内存。当前的实现涵盖了单节点上的线程和进程之间的分布式。

快速指南

要使用它,只需导入,定义您选择的内核函数,然后映射!

import numpy as np
import pasha as psh

# Get some random input data
inp = np.random.rand(100)

# Allocate output array via pasha. The returned array is
# guaranteed to be accessible from any worker, and may
# reside in shared memory.
outp = psh.alloc(like=inp)

# Define a kernel function multiplying each value with 3.
def triple_it(worker_id, index, value):
    outp[index] = 3 * value

# Map the kernel function.
psh.map(triple_it, inp)

# Check the result
np.testing.assert_allclose(outp, inp*3)

运行环境由映射上下文控制。默认上下文对象是ProcessContext,它使用multiprocessing.Pool将工作分布到多个进程中。此上下文仅在支持fork()系统调用的*nix系统上工作,因为它期望任何输入数据都是共享的。当选择进程上下文时,psh.alloc()在共享内存中创建数组,因此工作者可以将输出数据写入其中,调用者可以无内存拷贝地检索它。

您可以选择创建显式的上下文对象并直接使用它,或者更改默认上下文,例如:

psh.set_default_context('threads', num_workers=4)

有三种内置的上下文类型:serialthreadsprocesses

传递给map()的输入数组被称为函子,并自动包装在合适的Functor对象中,这里为SequenceFunctor。这对于许多常见的数组和序列类型都适用,但您也可以实现自己的Functor对象来包装任何可迭代的其它对象。

例如,这用于与EXtra-data紧密集成,这是一个用于访问在欧洲X射线自由电子激光装置上记录的科学数据的工具包。使用它,您可以对DataCollectionKeyData对象进行映射,以并行化您的数据分析。

def analysis_kernel(worker_id, index, train_id, data):
    # Do something with the data and save it to shared memory.

run = extra_data.open_run(proposal=700000, run=1)
psh.map(analysis_kernel, run[source, key])

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

pasha-0.1.1.tar.gz (10.5 kB 查看哈希值)

上传时间

构建分发

pasha-0.1.1-py3-none-any.whl (11.7 kB 查看哈希值)

上传时间 Python 3

由以下提供支持