Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么我的带有jit函数的模块需要这么长时间才能导入?_Python_Numba - Fatal编程技术网

Python 为什么我的带有jit函数的模块需要这么长时间才能导入?

Python 为什么我的带有jit函数的模块需要这么长时间才能导入?,python,numba,Python,Numba,我已经创建了一个python模块,并将其导入jupyter笔记本以供一般使用。我在模块中有许多jit函数,大约20个。导入模块可能需要一分钟,但是如果我注释掉@njit decorators,模块将立即导入。我想知道是否有python高手知道在import的幕后发生了什么。有什么办法可以缩短这么长的导入时间吗?因此我发现删除函数的签名显著加快了导入时间。但是,功能的第一次执行速度明显较慢。如果函数有签名,则在导入时编译函数,这是因为已知输入和返回类型。如果没有签名,则在执行时编译函数,因为只有在

我已经创建了一个python模块,并将其导入jupyter笔记本以供一般使用。我在模块中有许多jit函数,大约20个。导入模块可能需要一分钟,但是如果我注释掉@njit decorators,模块将立即导入。我想知道是否有python高手知道在import的幕后发生了什么。有什么办法可以缩短这么长的导入时间吗?

因此我发现删除函数的签名显著加快了导入时间。但是,功能的第一次执行速度明显较慢。如果函数有签名,则在导入时编译函数,这是因为已知输入和返回类型。如果没有签名,则在执行时编译函数,因为只有在这一点上,编译器才知道输入和返回类型。

使用
jit
njit
的原因是,它将函数编译为机器代码,以便在后续运行中运行得更快,但请记住,第一次编译操作会产生开销。看起来,当每个函数导入时,您可能都在等待编译时间。谢谢!是的,这是有道理的,我确实考虑过,但是我认为代码是在执行相应的函数时编译的,也就是说,当代码运行时,而不是在导入时。通常这就是它应该工作的方式,但是它可能取决于您是如何实现的。如果您显示要导入的脚本中的一些代码,以及如何导入它,这可能有助于说明问题。我认为这实际上是因为我的所有函数都有签名,因此它们在导入时被编译为二进制文件。如果我删除签名,导入实际上是即时的,但是由于编译时间的原因,我的模拟的第一次迭代(整个系统是蒙特卡罗模拟)需要更长的时间。是的,最终我反复使用它们,所以我看到了一个大的加速。我只是以前不知道代码是在导入时编译的。谢谢你的帮助。