jupyter神奇用法(两个jupyter 共享数据)

两个jupyter怎么共享数据

工作中,经常使用的python也就是jupyter notebook。有时候事情多了,也会同时打开几个jupyter notebook。这就导致我的一个问题,因为我在notebook 1里面有个计算结果想要用在notebook 2里面怎么办。

解决的办法非常多,可以使用磁盘文件(比如csv文件,excel文件)转存、套接字或者其他要求序列化、反序列化和复制数据的共享形式。但是我觉得不太优雅,我更加喜欢通过内存共享数据。因为通过内存可以拥有更出色的性能。

我这里分享一个小技巧。

开始尝试

一共两个jupyter notebook:

  1. 第一个jupyter notebook名称叫【计算部分】,这里面有个result,是我们需要的非常重要的结果。

    图片

  2. 第二个jupyter notebook名称叫【使用部分】,这个是使用【计算部分】的result。

步骤

  1. 先在【计算部分】里面加上这些代码。

class ShareData(object):
    def __init__(self, data):
        self.data = data
        self.shm = shared_memory.SharedMemory(create=True, size=self.data.nbytes)
    
    def run(self):
        self.tempdata = np.ndarray(self.data.shape, dtype=self.data.dtype, buffer=self.shm.buf)
        self.tempdata[:] = self.data[:]
        print(f"数据储存的位置为:{self.shm.name}")
        print(f"数据的大小尺寸为: {self.data.shape}")
        print(f"数据的类型为: {self.data.dtype}")


# 
sharedata = ShareData(data=result)
sharedata.run()

样子是这样的:

图片

  1. 在【使用部分】这样写代码:需要注意的是:在【计算部分】中的【数据储存位置】、【数据的大小】、【数据的类型】三个参数,都放到【使用部分】里面。这样写代码:

import numpy as np 
from multiprocessing import shared_memory

# def returndata(name, shape, dtype):
#     exist_shm = shared_memory.SharedMemory(name=name)
#     data = np.ndarray(shape=shape,dtype=dtype,buffer=exist_shm.buf)
#     return data
# getdata = returndata(name='psm_10d26010', shape=(10,), dtype=np.int64)
# getdata

exist_shm = shared_memory.SharedMemory(name='psm_6d2ee752')
data = np.ndarray(shape=(10,),dtype=np.int64,buffer=exist_shm.buf)
data

样子是这样的:

图片

  1. 然后就可以看到,【使用部分】的【data】数据是和【计算部分】的result是一模一样的。

工作原理:

SharedMemory创建一个新的共享内存块或者连接到一片已经存在的共享内存块。每个共享内存块都被指定了一个全局唯一的名称。通过这种方式,进程可以使用一个特定的名字创建共享内存区块,然后其他进程使用同样的名字连接到这个共享内存块。以下示例展示了一个现实中的例子,使用 SharedMemory 类和 NumPy arrays 结合, 从两个 Python shell 中访问同一个 numpy.ndarray 。

最后

  1. 封面来源:https://realpython.com/python-memory-management/

  2. idea来源:https://docs.python.org/zh-cn/3/library/multiprocessing.shared_memory.html

阅读更多

恕我直言:一个爱C++、爱python、爱R、爱女朋友、爱美食的数据分析师、你怎么忍心不关注我~  qwq~😏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yuanzhoulvpi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值