相关疑难解决方法(0)

多处理:在进程之间共享一个大的只读对象?

是否通过程序中先前创建的多处理共享对象生成子进程?

我有以下设置:

do_some_processing(filename):
    for line in file(filename):
        if line.split(',')[0] in big_lookup_object:
            # something here

if __name__ == '__main__':
    big_lookup_object = marshal.load('file.bin')
    pool = Pool(processes=4)
    print pool.map(do_some_processing, glob.glob('*.data'))
Run Code Online (Sandbox Code Playgroud)

我正在将一些大对象加载到内存中,然后创建一个需要使用该大对象的工作池.大对象以只读方式访问,我不需要在进程之间传递它的修改.

我的问题是:加载到共享内存中的大对象,如果我在unix/c中生成进程,或者每个进程是否加载了自己的大对象副本?

更新:进一步澄清 - big_lookup_object是一个共享查找对象.我不需要拆分它并单独处理它.我需要保留一份副本.我需要分割它的工作是读取许多其他大文件,并在查找对象中查找这些大文件中的项目.

进一步更新:数据库是一个很好的解决方案,memcached可能是一个更好的解决方案,磁盘上的文件(shelve或dbm)可能更好.在这个问题中,我对内存解决方案特别感兴趣.对于最终的解决方案,我将使用hadoop,但我想看看我是否也可以拥有本地内存版本.

python multiprocessing

97
推荐指数
4
解决办法
5万
查看次数

Python多处理全局变量更新未返回到父级

我试图从子进程返回值,但遗憾的是这些值是不可取消的.所以我在线程模块中使用了全局变量并且成功但在使用多处理模块时无法检索子进程中完成的更新.我希望我错过了一些东西.

最终打印的结果始终与给定vars dataDV03和dataDV04的初始值相同.子进程正在更新这些全局变量,但这些全局变量在父级中保持不变.

import multiprocessing

# NOT ABLE to get python to return values in passed variables.

ants = ['DV03', 'DV04']
dataDV03 = ['', '']
dataDV04 = {'driver': '', 'status': ''}


def getDV03CclDrivers(lib):  # call global variable
    global dataDV03
    dataDV03[1] = 1
    dataDV03[0] = 0

# eval( 'CCL.' + lib + '.' +  lib + '( "DV03" )' ) these are unpicklable instantiations

def getDV04CclDrivers(lib, dataDV04):   # pass global variable
    dataDV04['driver'] = 0  # eval( 'CCL.' + lib + '.' …
Run Code Online (Sandbox Code Playgroud)

python multiprocessing

34
推荐指数
4
解决办法
4万
查看次数

标签 统计

multiprocessing ×2

python ×2