小编The*_*alt的帖子

在 for 循环中加载 Python pickle 会变慢

我有一个 25GB 的 numpy 数组字典。该词典如下所示:

  • 668,956 个键值对。
  • 键是字符串。示例键: "109c3708-3b0c-4868-a647-b9feb306c886_1"
  • 这些值是 shape 200x23、 type的 numpy 数组float64

当我在循环中重复使用 pickle 加载数据时,加载时间会变慢(请参阅下面的代码和结果)。可能是什么原因造成的?

代码:

def load_pickle(file: int) -> dict:
    with open(f"D:/data/batched/{file}.pickle", "rb") as handle:
        return pickle.load(handle)


for i in range(0, 9):
    print(f"\nIteration {i}")
    
    start_time = time.time()
    file = None
    print(f"Unloaded file in {time.time() - start_time:.2f} seconds")

    start_time = time.time()
    file = load_pickle(0)
    print(f"Loaded file in {time.time() - start_time:.2f} seconds")
Run Code Online (Sandbox Code Playgroud)

结果:

Iteration 0
Unloaded file in 0.00 seconds
Loaded file in 18.80 seconds

Iteration …
Run Code Online (Sandbox Code Playgroud)

python pickle

10
推荐指数
0
解决办法
246
查看次数

Android - 生命周期并保存实例状态问题

因此,在我的应用程序中是一个用于创建新用户的表单,其中包含有关用户的相关详细信息和信息.这里没有问题,只是当用户离开活动而没有按下确认按钮时会发生什么.

这就是我想要做的事情:

  1. 如果用户按下后退按钮,则尝试将所有数据保存到数据库并通知用户.
  2. 如果活动中断(即通过电话呼叫),将所有数据保存到临时位置,这样当活动再次位于堆栈顶部时,似乎没有任何更改(但数据仍未保存)到数据库).
  3. 如果活动在后台获取更多资源而被杀死,请执行与上面第2点相同的操作(即,当活动再次启动时,似乎没有任何更改).
  4. 如果再次启动整个应用程序(再次单击图标)并且存在从上面的点2或3存储的临时数据,则导航到"创建用户"活动并显示数据,就好像未更改.

以下是我目前正在尝试的方法:

  • 使用onDestroy()isFinishing()函数来查找活动被杀死的时间,以覆盖上面的第1点(然后尝试并保存所有数据).
  • 将所有数据保存onSaveInstanceState到一个包中(以覆盖上面的第2点)
  • 创建的包是否会onSaveInstanceState因为更多资源而被杀死的活动存活下来,因此当重新创建它时,可以检索以前的状态(如上面的第3点)?
  • 不知道如何实施第4点.

任何帮助都将受到大力赞赏.

干杯!

lifecycle android

6
推荐指数
1
解决办法
5513
查看次数

标签 统计

android ×1

lifecycle ×1

pickle ×1

python ×1