栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在python多处理中修改对象

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在python多处理中修改对象

问题在于,当将对象传递给工作进程时,它们会被泡菜包装,运送到另一个过程中,然后在其中解压缩并进行处理。您的对象没有像克隆的那样传递给其他过程。您不返回对象,因此克隆的对象被愉快地修改,然后被丢弃。

看起来这是无法完成的(Python:可以在两个单独的进程之间共享内存中的数据)。

您可以做的就是返回修改后的对象。

import numpy as npimport multiprocessing as mpclass Tester:    num = 0.0    name = 'none'    def __init__(self,tnum=num, tname=name):        self.num  = tnum        self.name = tname    def __str__(self):        return '%f %s' % (self.num, self.name)def mod(test, nn, out_queue):    print test.num    test.num = np.random.randn()    print test.num    test.name = nn    out_queue.put(test)if __name__ == '__main__':num = 10    out_queue = mp.Queue()    tests = np.empty(num, dtype=object)    for it in range(num):        tests[it] = Tester(tnum=it*1.0)    print 'n'    workers = [ mp.Process(target=mod, args=(test, 'some', out_queue) ) for test in tests ]    for work in workers: work.start()    for work in workers: work.join()    res_lst = []    for j in range(len(workers)):        res_lst.append(out_queue.get())    for test in res_lst: print test

这的确引起了一个有趣的观察,因为产生的过程是相同的,所以对于随机数它们都以相同的种子开始,因此它们 产生相同的“随机”数。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/639064.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号