如何在python子进程之间传递大型numpy数组而不保存到磁盘?

如何在python子进程之间传递大型numpy数组而不保存到磁盘?,第1张

如何在python子进程之间传递大型numpy数组而不保存到磁盘

在四处搜寻有关Joe Kington发布的代码的更多信息时,我发现了numpy-
sharedmem
软件包。从这个numpy
/ multiprocessing教程
来看,它似乎具有相同的知识遗产(也许基本上是相同的作者?–我不确定)。

使用sharedmem模块,您可以创建一个共享内存的numpy数组(太棒了!),并将其与如下所示的多重处理一起使用:

import sharedmem as shmimport numpy as npimport multiprocessing as mpdef worker(q,arr):    done = False    while not done:        cmd = q.get()        if cmd == 'done': done = True        elif cmd == 'data': ##Fake data. In real life, get data from hardware. rnd=np.random.randint(100) print('rnd={0}'.format(rnd)) arr[:]=rnd        q.task_done()if __name__=='__main__':    N=10    arr=shm.zeros(N,dtype=np.uint8)    q=mp.JoinableQueue()        proc = mp.Process(target=worker, args=[q,arr])    proc.daemon=True    proc.start()    for i in range(3):        q.put('data')        # Wait for the computation to finish        q.join()print arr.shape        print(arr)    q.put('done')    proc.join()

运行收益

rnd=53(10,)[53 53 53 53 53 53 53 53 53 53]rnd=15(10,)[15 15 15 15 15 15 15 15 15 15]rnd=87(10,)[87 87 87 87 87 87 87 87 87 87]


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5644206.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存