python - 错误: number of arguments and self

标签 python numba

我试图弄清楚如何使用numba来最好地预编译一个长时间运行的函数并将其放入QThread中。不幸的是,我遇到了各种各样的问题(其中一个甚至是 numba 不打印错误,只是使程序崩溃)。

我整理了一个小代码示例来尝试至少使其工作,但这仍然遇到问题。

ma​​in.py

import sys
from PyQt5 import QtCore, QtGui, QtWidgets, uic

import workClass

class MainWindow(QtWidgets.QMainWindow):

    def __init__(self):
        t = workClass.longThread()
        t.start()

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    window = MainWindow()
    sys.exit(app.exec_())

workclass.py

import numpy as np
from PyQt5.QtCore import QThread
from numba import jit
import time

class longThread(QThread):

    def __init__(self):
        super(longThread, self).__init__()
        return None

    def run(self):
        start = int(round(time.time() * 1000))
        j = np.iinfo(np.long).max
        print(self.doStuff(j))
        print(str(int(round(time.time() * 1000)) - start))

    @jit("float64(int32)")
    def doStuff(j):

        for i in range(0, 1000000):
            j = np.sqrt(j)
        return j

当我运行这个时,我得到:

TypeError: too many arguments: expected 1, got 2 at print(self.doStuff(j))

我假设这是Python传递self以及j。但是,如果我将 self 添加到 doStuff 的 def 中,那么 numba 就会提示,因为它无法编译 self。那么,设置 numba 的正确方法是什么?

我知道在这个特定的实例中,有些东西可以移动,但它的设置尽可能接近我的真实项目。

顺便说一句,如果我只是用 nopython=True 替换 dostuff 的签名,然后添加 self 作为第一个参数,它至少超过了这一点,实际上打印了一个关于编译类型的错误,我的真实项目由于某种未知的原因而拒绝这样做,我无法复制。

最佳答案

您可以尝试将其定义为 staticmethod :

@staticmethod
def doStuff(j):
    # code goes here

这样,您就不必传入对 self 的引用,并且该方法仍然可以保留在类中。

关于python - 错误: number of arguments and self,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49580415/

相关文章:

python - 如何将 config.py 中的 Python 参数传递给 .sql 文件?

python - 如何从另一个函数访问框架小部件?

python - 学习根据历史预测 future 客户的行为

python - 如何迭代创建嵌套字典?

python - 在 Windows 上对包进行符号链接(symbolic link)时出现 ImportError

python - 为什么 numba 和 numpy 在就地操作上表现不同?

python - 使用 Numba 进行 Numpy 优化

pandas - 属性错误: module 'numba' has no attribute 'targets'

python - Cython/Numba 编译函数可以改进 numpy.max(numpy.abs(a-b)) 吗?

python - 如何使用numba加速快速排序?