Jupyter notebook Jupyter笔记本-未使用Numba和Dask定义全局名称

Jupyter notebook Jupyter笔记本-未使用Numba和Dask定义全局名称,jupyter-notebook,dask,numba,Jupyter Notebook,Dask,Numba,当我试图在一大组图像上并行化一个缓慢的函数时,我遇到了一个错误,我无法找到关于它的任何信息。只有在Jupyter笔记本上运行代码时,才会出现此错误。在一个python文件中,有另一个错误,我在这个主题中找到了一个修复方法 代码片段如下所示: cell1 import numba import numpy as np import pandas as pd import time import dask.dataframe as dd from dask.multiprocessing impo

当我试图在一大组图像上并行化一个缓慢的函数时,我遇到了一个错误,我无法找到关于它的任何信息。只有在Jupyter笔记本上运行代码时,才会出现此错误。在一个python文件中,有另一个错误,我在这个主题中找到了一个修复方法

代码片段如下所示:

cell1

import numba
import numpy as np
import pandas as pd
import time

import dask.dataframe as dd
from dask.multiprocessing import get
from multiprocessing import cpu_count
cell2

def f1(x):
    return x + 1

@numba.jit
def f2(x):
    x1 = f1(x)
    time.sleep(0.05)
    return x1, x

@numba.jit
def f3(x):
    a, b = f2(x)
    time.sleep(0.1)
    return a + b

def f4(x, y):
    return f3(x) + y
cell3

nCores = 4 #cpu_count()

df = pd.DataFrame(np.random.randint(0, 100 , size=(100, 2)), columns=["A", "B"])

res = dd.from_pandas(df, npartitions=nCores).\
   map_partitions(
      lambda df_ : df_.apply(
         lambda x : f4(x.A, x.B), axis=1)).\
   compute(get=get)

print(res)
要在python脚本上运行此代码,如果需要,请在单元格3的内容之前运行著名的
if\uuuu name\uuuu==“\uuuuu main\uuu”:

但这在笔记本上不起作用。返回的错误为:

NameError:(“未定义全局名称‘f2’,‘发生在索引50’)

这些是我做过的一些试验:

  • 如果我删除
    @numba.jit
    ,它就会工作
  • 如果我使用标准的pandas apply和
    @numba.jit
    一起使用,它会工作
  • 如果两者都存在,它将失败
有人知道如何在Jupyter笔记本的特定情况下修复此问题吗

提前谢谢你


Nicolas

建议您使用dask.distributed而不是多处理。建议您使用dask.distributed而不是多处理。