Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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 错误:参数数和自变量数_Python_Numba - Fatal编程技术网

Python 错误:参数数和自变量数

Python 错误:参数数和自变量数,python,numba,Python,Numba,我试图找出如何使用numba来最好地预编译长时间运行的函数,并将其放入QThread中。不幸的是,我遇到了各种各样的问题(其中一个问题是numba没有打印错误,只是程序崩溃) 我收集了一个小的代码示例,试图至少让它起作用,但这仍然是个问题 main.py import sys from PyQt5 import QtCore, QtGui, QtWidgets, uic import workClass class MainWindow(QtWidgets.QMainWindow):

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

我收集了一个小的代码示例,试图至少让它起作用,但这仍然是个问题

main.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_())
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
工人阶级.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_())
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:参数太多:应为1,打印时为2(self.doStuff(j))
我假设这是python传递的
self
以及
j
。但是如果我将
self
添加到
doStuff
的def中,那么
numba
会发出呜呜声,因为它无法编译
self
。那么,设置numba的正确方法是什么呢

我知道这是一个特殊的例子,有些东西可以移动,但这是建立尽可能接近我的真实项目,我可以得到它


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

您可以尝试将其定义为:


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

为什么需要它成为一个方法呢?从文档中,可以编译函数并处理类。。。警告:这是jitclass支持的早期版本。尚未公开或实现所有编译功能。。坚持使用函数是明智的,特别是当类也是QT的时候。我不想预编译一个类,只是一个长时间运行的算法,一个带有decorori的函数实际上也尝试过这一点,numba抱怨道。我不记得确切的消息是什么,该项目在另一台计算机上,不在这里。@Bastiat最好编辑您的帖子,并为这种情况添加错误消息。