Kevin__Cao 2021-07-14 21:36 采纳率: 71.4%
浏览 232
已结题

python多线程代码报错

python多线程代码报错,个人觉得是没写参数,但不会改,请给出参数的修改代码

def handleCalc16(self):
    if self.timer3 is None:
        self.timer3 = QTimer()
        self.timer3.start(0.1)
        self.timer3.timeout.connect(self.handleCalc16)
    pp = pprint.PrettyPrinter(indent=4)
    with artdaq.Task() as task:
        task.ai_channels.add_ai_voltage_chan("Dev1/ai0")
        task.timing.cfg_samp_clk_timing(
            1000, sample_mode=AcquisitionType.CONTINUOUS, samps_per_chan=2)
        data = task.read(number_of_samples_per_channel=1)
        data = ','.join(str(i) for i in data)
        data = float(data) * 40
        self.ui.textBrowser_6.append('%.2f' % ((float('%.5f' % data)) ))
        self.ui.textBrowser_6.moveCursor(self.ui.textBrowser_6.textCursor().End)
thread = Thread(target=handleCalc16)
thread.start()

以下是报错信息
File "D:\PyCharm 2019.1.1\python3.7.9\lib\threading.py", line 870, in run
self._target(*self._args, **self._kwargs)
TypeError: handleCalc16() missing 1 required positional argument: 'self'

  • 写回答

1条回答 默认 最新

  • 天元浪子 Python领域优质创作者 2021-07-14 23:47
    关注

    使用Thread创建线程时,target参数传入线程函数,线程函数的参数则需要args参数传入。根据题主的意图,thread=Thread(target=handleCalc16)一句,似应改为thread=Thread(target=handleCalc16, args=(x,))。不过,从题主的代码看,handleCalc16应该是一个类的方法,其参数self是类实例,是隐含的,因此x可能是虚拟的。正确的写法是,先实例化类,然后用实例的handleCalc16方法作为线程函数。比如,假定类名为SomeClass,实例a=SomeClass(),然后thread=Thread(target=a.handleCalc16),如此这般,就应该没有问题了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月2日
  • 已采纳回答 9月24日
  • 创建了问题 7月14日

悬赏问题

  • ¥15 帮我解决一下膳食平衡的线性规划模型的数据实例
  • ¥40 万年历缺少农历,需要和阳历同时显示
  • ¥250 雷电模拟器内存穿透、寻基址和特征码的教学
  • ¥200 比特币ord程序wallet_constructor.rs文件支持一次性铸造1000个代币,并将它们分配到40个UTXO上(每个UTXO上分配25个代币),并设置找零地址
  • ¥15 关于Java的学习问题
  • ¥15 如何使用chatgpt完成文本分类任务?
  • ¥15 已知速度v关于位置s的等式,怎么转化为已知位置求速度v的等式
  • ¥15 我有个餐饮系统,用wampserver把环境配置好了,但是后端的网页却进去,是为什么,能不能帮远程一下?
  • ¥15 R运行没有名称为"species"的插槽对于此对象类"SDMmodelCV"
  • ¥20 基于决策树的数字信号处理,2ask 2psk 2fsk的代码,检查下报错的原因