通过dbus传递大型数据结构


问题内容

我正在使用dbus交流两个程序。一个创建一个大图像,然后将其发送给其他程序进行进一步处理。我将图像作为ByteArray传递。

对于2000x2000的图像,我的程序可以运行,但是对于4000x4000的图像,它的苛求是:

process 2283: arguments to dbus_message_iter_append_fixed_array() were       
incorrect,assertion "n_elements <= DBUS_MAXIMUM_ARRAY_LENGTH / _dbus_type_get_alignment  
(element_type)" failed in file dbus-message.c line 2628.

我了解这意味着我传递的数组大于允许的范围。还有其他方法可以在dbus中传递大数据结构吗?

这是我正在使用的代码的摘录:

handle = StringIO()
# hdulist contains the large data structure
hdulist.writeto(handle)
hdub = dbus.ByteArray(handle.getvalue())
# this sends the image via dbus
self.dbi.store_image(hdub)

在另一端,我有类似

def store_image(self, bindata):
    # Convert binary data back to HDUList
    handle = StringIO.StringIO(bindata)
    hdulist = pyfits.open(handle)

问题答案:

我认为Dbus并不是发送大量数据的最佳方法。

如何将数据结构写出到/ tmp中的文件,然后仅通过dbus在程序之间传递文件名呢?