You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何跨多进程(含不同语言)使用Apache Arrow IPC?

跨进程只读访问PyArrow Table的实现疑问

我需要在一个进程中创建数组/表,供另一个进程以只读方式访问,目前已创建了如下PyArrow Table:

import pyarrow as pa

a1 = pa.array(list(range(3)))
a2 = pa.array(["foo", "bar", "baz"])

# a1输出:
# <pyarrow.lib.Int64Array object at 0x7fd7c4510100>
# [
#   0,
#   1,
#   2
# ]

# a2输出:
# <pyarrow.lib.StringArray object at 0x7fd7c5d6fa00>
# [
#   "foo",
#   "bar",
#   "baz"
# ]

tbl = pa.Table.from_arrays([a1, a2], names=["num", "name"])

# tbl输出:
# pyarrow.Table
# num: int64
# name: string
# ----
# num: [[0,1,2]]
# name: [["foo","bar","baz"]]

我尝试用multiprocessing.shared_memory.SharedMemory实现跨进程访问,但遇到了错误:

from multiprocessing import shared_memory
import pyarrow as pa

shm = shared_memory.SharedMemory(name='pa_test', create=True, size=tbl.nbytes)
with pa.ipc.new_stream(shm.buf, tbl.schema) as out:
    for batch in tbl.to_batches():
        out.write(batch)

# 报错:TypeError: Unable to read from object of type: <class 'memoryview'>

我有以下几个疑问:

  • 是否需要对shm.buf进行包装才能让PyArrow的IPC流正常使用?
  • 即便解决上述问题,操作仍显繁琐,如何实现更健壮的跨进程访问?是否需要使用zmq这类工具?
  • 我不太理解零拷贝的实现机制:写入记录批次时不也是序列化吗?我遗漏了什么关键点?
  • 实际场景中后续还需要与Julia交互,不过这是后续问题。

注:我已查阅Apache Arrow官方文档,但这部分内容并未得到明确说明。

内容的提问来源于stack exchange,提问作者suvayu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 04:11:20