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最好编辑您的帖子,并为这种情况添加错误消息。