在cpdef cython函数中快速访问locale变量

2024-06-09 19:47:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要从python快速访问用cython编写的算法中使用的变量: 这是伪代码:

cpdef(double a, double b):
    while a < 100.:
        # some long-term calculations
        a = x

因为我从python调用它,所以我使用cpdef函数。用户需要一个长期计算进度的提示。这可以通过访问“a”变量来实现。但是在cpdef函数中不能使用引用参数(double&a)或指针(double*a)(编译器错误)。如何快速访问函数的局部变量?在


Tags: 函数代码用户算法参数some快速访问cython
1条回答
网友
1楼 · 发布于 2024-06-09 19:47:59

显示进度的一种非常标准的方法是使用回调,这不是cython特有的,而是通用的python,因此在cython中也能很好地工作。基于回调的方法在单线程和多线程程序中都可以工作,这与某些只适用于多线程程序的引用不同。使用回调会带来非常轻微的性能损失,但是如果代码只在几秒钟内调用回调100次(或者不管需要进度条多长时间),则根本不会注意到性能的影响,因为cython代码可以轻松地以每秒30000000次的速度调用python回调你做的事情和显示进度有很大的不同,回调应该可以完美地工作。在

下面是一个工作示例:

cpdef foo(double a, double b, object callback=None):
    while a < 100:
        a += 1
        # some long-term calculations
        if callback is not None:
            callback(a)


def progress(a):
    print(a)

foo(0, 0, progress)

使用回调可以很容易地调用任何类型的代码。在这个例子中,我只使用了一个python函数,但是你也可以在一个对象实例上传递一个方法(“绑定方法”),以打印到屏幕上,更新GUI元素,发送一条消息等。如果回调要做很多工作,只需确保不要太频繁地调用它(例如,在计算过程中每100次只调用一次)。在

相关问题 更多 >