Estoy tratando de usar numba recientemente para acelerar partes de mi código en python. Estaba tratando de ejecutar la función 1 desde dentro de la función 2 mientras ambas están compiladas con numba, pero no funciona. Aquí está mi código:
import numba as nb from math import acos from time import time @nb.jit("void()") def myfunc(): s = 0 for i in range(10000000): s += acos(0.5) print('The sum is: ', s) @nb.jit("void()") def myfunc2(): myfunc() tic = time() myfunc2() toc = time() print(toc-tic) Cuando llamo a myfunc() , el código funciona y obtengo un resultado mucho más rápido que cuando no estoy usando numba. Sin embargo, cuando llamo a myfunc2 veo este error:
File "~/.spyder-py3/temp.py", line 22, in <module> myfunc2() RuntimeError: missing Environment¿Alguien tiene alguna idea de por qué llamar a una función desde dentro de otra no funciona en este caso?
Se introdujo una solución en v0.39. Según las notas de la versión :
PR #2986: Arreglar la propagación del entorno
Ver github pull #2986 para más detalles.
Este es un problema conocido. Como se describe en el número 2411 de github :
Parece que el puntero del entorno no se pasa correctamente a través de las funciones de nopython.
Modificar como se muestra a continuación para eliminar print() de las funciones numba debería solucionar esto:
import numba as nb from math import acos from time import time @nb.jit("void()") def myfunc(): s = 0 for i in range(10000000): s += acos(0.5) return s @nb.jit("void()") def myfunc2(): return myfunc() tic = time() x = myfunc2() # 10471975.511390356 toc = time() print(toc-tic)