当前位置: 首页 > 知识库问答 >
问题:

有没有办法在IPython笔记本中同时运行多个单元格?

卢涵畅
2023-03-14

笔记本中的一个单元执行很长时间,而机器中的另一个CPU处于空闲状态。是否可以并行运行其他单元?

共有3个答案

常炯
2023-03-14

我想介绍一个具有此功能的库,它不需要多个笔记本等。。。

Parsl是Python中高效的并行编程语言

配置

import parsl
from parsl.app.app import python_app, bash_app
parsl.load()

作为一个例子,我从parsl/parsl-教程中编辑了这个片段。

# App that generates a random number after a delay
@python_app
def generate(limit,delay):
    from random import randint
    import time
    time.sleep(delay)
    return randint(1,limit)

# Generate 5 random numbers between 1 and 10
import time
st = time.time()
rand_nums = []
for i in range(5):
    rand_nums.append(generate(10, 1))

# Wait for all apps to finish and collect the results
outputs = [i.result() for i in rand_nums]
et = time.time()
print(f"Execution time: {et - st:.2f}")

# Print results
print(outputs)

结果:

Execution time: 3.00
[1, 6, 4, 8, 3]

请注意,代码执行所需的时间是3秒而不是5秒。

因此,您可以调用函数(在本例中是generate(…) )在单元格中。此生成(…) 将返回一个对象。然后,如果调用。result()在对象上,它将:

  1. 如果程序正在等待结果,请停止程序
  2. 如果已完成,则返回结果

因此,只要调用。result()在最后几个单元格中,子例程将在后台运行。你可以确定,在最后几个单元格中,结果是可以得到的。

关于数据依赖,parsl非常聪明,它将等待依赖的数据,即使它用@python_app修饰。

卢书
2023-03-14

这并不能直接回答你的问题,但我认为这会帮助很多有同样问题的人。您可以轻松地在笔记本之间移动变量,然后在另一个笔记本上继续运行函数,然后将结果移回主笔记本。

例如:

笔记本1:

%store X
%store y

笔记本2:

%store -r X
%store -r y

new_df = ...
%store new_df

笔记本1:

%store -r new_df 
章乐逸
2023-03-14

是的。这里是留档的IPython并行(以前的IPython并行),它将向您展示如何生成多个IPython内核。在您可以自由地跨内核分发工作之后,您可以在单元格前添加%%px0%%px1...%%px999(一旦设置),以在特定引擎上执行单元格,实际上对应于单元格的并行执行。我建议你也去看看Dask

 类似资料:
  • 问题内容: 我有一个整数数组列表。我需要找到两者之间的共同点。我能想到的是 两个列表 中“ 通用”元素中列出的内容 的扩展 数组中也没有重复项。 有没有直接的方法可以做到这一点? 问题答案: 您可以将列表转换为集合,然后使用方法在不同集合之间进行交集。与所有集合相交后,剩下的就是公共元素,可以将结果集合转换回列表。

  • 我们正在考虑从MySQL迁移到AWS Aurora。我们正在为开发人员运行vagrant,因此每个虚拟盒子都有自己的mysql实例。有没有办法在本地运行极光?如果不是,处理这种情况的最佳方法是什么?

  • 我使用KCL编写了一个Amazon Kinesis消费者,KCL管理我的记录处理任务。它当前正在处理记录而不进行筛选。我正在寻找一种方法来处理样本记录,同时跳过其中的一些记录。 例如,如果总共有100条记录,我只想处理其中的1/10(10个样本记录)。 谢谢

  • 问题内容: 我快速浏览了Guava的源代码和文档,但似乎都没有提到版本。我想知道是否有一种方法可以在运行时获取Guava的版本信息。 如果实际上不存在此版本信息,则不必通过任何获取器进行访问。如果将其保存在某个字段中,而该字段在加载番石榴时没有得到GC,那么就足够了。 在运行时的任何地方都可以使用此版本信息吗? 我对此有非常具体的用途。我的工作很大一部分是分析Java堆转储,以识别并修复代码中导致

  • 每次启动IPython笔记本时,我运行的第一个命令是 有没有办法改变我的配置文件,以便当我启动IPython时,它自动处于这种模式?

  • 问题内容: 我们正在开发S60版本,该平台具有不错的Python API。 但是,关于Android上的Python尚无任何官方资料,但是由于Jython存在,有没有办法让蛇和机器人一起工作? 问题答案: 一种方法是使用: 开源Python库,用于快速开发利用创新用户界面的应用程序,例如多点触控应用程序。 可在和上运行。你可以在所有受支持的平台上运行相同的代码。