首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跨声速运行python代码而不是pythran

跨声速运行python代码而不是pythran
EN

Stack Overflow用户
提问于 2020-11-16 11:54:24
回答 1查看 289关注 0票数 2

在使用pythran的第一个好结果之后,我尝试跨音速从jit和类支持中获益。不幸的是,它没有像预期的那样运行。

如果我使用@jit装饰器,就会编译和缓存修饰函数,但是在代码的第一次运行过程中,编译后的版本不会被使用,而是由python处理。第一次运行后,将使用缓存的版本。

如果我使用@boost装饰器并运行transonic runmwe.py,编译后的版本将在__pythran__文件夹中创建,但是使用python runmwe.py运行脚本会收到以下警告,代码将由python处理。

代码语言:javascript
复制
WARNING: Pythran file does not seem to be up-to-date:
<module '__pythran__.runmwe_920d6d0a5cd396436d463468328e997b' from '__pythran__/runmwe_920d6d0a5cd396436d463468328e997b.cpython-38-x86_64-linux-gnu.so'>

重新运行transonic runmwe.py只会产生一个警告,表明代码已经是最新的。

我是错过了正确使用@jit@boost的一些配置,还是这是预期的行为,我使用跨音速的方式是错误的?

康达锻造公司使用的软件:

跨声速0.4.5

吡喃0.9.7

python 3.8.6

MWE:

代码语言:javascript
复制
import numpy as np
from transonic import jit,boost

#transonic def looping(float[])

@boost
def looping(np_array):
    shape_x =np_array.shape[0]
    for x in range(shape_x):
                if np_array[x] < 0.5:
                    np_array[x] = 0
                else:
                    np_array[x] = 1
    return np_array

in_arr = np.random.rand(10**7)

looping(in_arr)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-09 11:10:49

您的问题是由于一个旧的错误跨音速(现在由https://foss.heptapod.net/fluiddyn/transonic/-/merge_requests/88修复)。

您使用#transonic def looping(float[]) (在#和跨声速之间没有空格),它只适用于#之后的空格(来自https://www.python.org/dev/peps/pep-0008/#block-comments:“块注释的每一行以#和单个空格开头”)。

解决问题的最简单方法是添加空间,即编写# transonic def looping(float[])。顺便说一下,任何代码格式化程序(比如https://black.readthedocs.io)都会自动为您添加它。

但是,Transonic支持类型注释,最好避免注释中的签名并编写:

代码语言:javascript
复制
from transonic import boost

@boost
def looping(np_array: "float[]"):
    ...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64857530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档