ValueError:信号仅在主解释器的主线程中工作

问题描述 投票:0回答:1

我正在开发一个用于实时对象检测的应用程序,可以通过语音命令打开它。程序中也没有错误,但问题是每次我运行程序时,flet 窗口都会这样说

ValueError:信号仅在主解释器的主线程中工作

但问题是我可以看到我在后台添加的对象。我不知道为什么会收到此错误,而且我以前从未遇到过此错误,请帮助,因为我需要在 2 天内完成我的项目

点击获取源代码

源代码已链接,以便您可以看到问题所在,请帮助我

python valueerror flet ultralytics
1个回答
0
投票

我下载了你的源代码,编译了正确版本的Python,安装了所有先决条件,并且能够重现你的问题。

main()
函数中,有这一行:

    app(target=main)

但最后还有这一行:

if __name__ == "__main__":
    app(target=main)

这意味着它正在尝试调用自己。如果这有效,你就会得到无限递归和堆栈溢出。删除第一个

app(target=main)

发生的事情是它试图注册信号处理程序(信号是程序中发生的事件,如

^C
、分段错误、挂起、管道损坏等),但这必须是在 Python 主线程中完成。当您调用
app()
时,它正在设置一个信号处理程序并为
main()
创建另一个执行线程,然后执行
main()
,它再次调用
app()
,它尝试再次设置信号处理程序(并且会称为
main()
,直到内存耗尽),但这失败了,因为您位于线程中,而不是执行主线中。

发生此问题时,屏幕上会显示回溯;当您发布问题时,请务必发布此回溯,例如:

  File "/home/vercingatorix/src/git/Drusthi/test.py", line 86, in main
    app(target=main)
  File "/home/vercingatorix/src/git/Drusthi/so2/lib/python3.11/site-packages/flet_runtime/app.py", line 70, in app
    return asyncio.run(
           ^^^^^^^^^^^^
  File "/home/vercingatorix/.pyenv/versions/3.11.9/lib/python3.11/asyncio/runners.py", line 190, in run
    return runner.run(main)
           ^^^^^^^^^^^^^^^^
  File "/home/vercingatorix/.pyenv/versions/3.11.9/lib/python3.11/asyncio/runners.py", line 118, in run
    return self._loop.run_until_complete(task)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/vercingatorix/.pyenv/versions/3.11.9/lib/python3.11/asyncio/base_events.py", line 654, in run_until_complete
    return future.result()
           ^^^^^^^^^^^^^^^
  File "/home/vercingatorix/src/git/Drusthi/so2/lib/python3.11/site-packages/flet_runtime/app.py", line 148, in app_async
    signal.signal(signal.SIGINT, exit_gracefully)
  File "/home/vercingatorix/.pyenv/versions/3.11.9/lib/python3.11/signal.py", line 58, in signal
    handler = _signal.signal(_enum_to_int(signalnum), _enum_to_int(handler))
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: signal only works in main thread of the main interpreter

这对于调试问题至关重要。

如果这解决了您的问题令您满意,请将答案标记为“已接受”!先感谢您;非常感谢!

© www.soinside.com 2019 - 2024. All rights reserved.