如何将对象数据传递给其他Python多处理进程?

时间:2017-10-04 22:06:27

标签: python multiprocessing

我正在尝试并行处理从我的数据库返回的一些数据。

我运行查询并获得结果集。

results = dbsession.query(table1, table2).outerjoin(table1.fk_id).limit(10).all()

我在PyCharms调试器和对象查看器中看到了我的所有数据和字段。其中一个字段是XML对象(MSSQL中的XML字段)。我找到了在python中创建自定义类型的代码(下面的代码)。

raw_xml element

然后我映射该列表并通过map将其发送到我的多处理功能。

pool = mp.Pool(processes=4)
mp_process_results = pool.map(partial(test_mp), results)

我的多处理功能

def test_mp(resultset):
    processed_file = Generic_translator(resultset).translate_record()
    return processed_file

一旦对象到达我的test_mp()函数,raw_xml数据就不再出现在raw_xml字段中。 raw_xml disappeared。其他字段(例如id,filename,basename,filesize等)都存在且可用。不幸的是,我需要raw_xml字段。

我认为这是因为已处理的内存不共享相同的内存空间。但是,我不确定如何将这些数据提供给其他进程。

import sqlalchemy.types as types
import lxml
import logging

from lxml import etree

class XMLType(types.UserDefinedType):

    def get_col_spec(self):
        return 'XML'

    def bind_processor(self, dialect):
        def process(value):
            if value is not None:
                if isinstance(value, str):
                    return value
                else:
                    return etree.tostring(value)
            else:
                return None
        return process

    def result_processor(self, dialect, coltype):
        def process(value):
            if (value is not None) and (value is not '') :
                try:
                    value = etree.fromstring(value)
                except lxml.etree.XMLSyntaxError:
                    logging.error("Syntax error in XML file: %s", value)
                    logging.error("XML result is probably NULL")
                    logging.error("XMLSyntaxError: %s", lxml.etree.XMLSyntaxError)
            return value
        return process

0 个答案:

没有答案