Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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 如何在PyQt中存储线程本地数据?_Python_Multithreading_Qt_Pyqt - Fatal编程技术网

Python 如何在PyQt中存储线程本地数据?

Python 如何在PyQt中存储线程本地数据?,python,multithreading,qt,pyqt,Python,Multithreading,Qt,Pyqt,在PyQt应用程序中存储线程本地数据的最佳方法是什么? 我的应用程序既使用QThreads,也通过一些依赖项使用本机Python线程(来自threading模块)。我的线程本地存储的特定用例主要与前者相关 我可以看到一些选择 使用threading.local。当从线程化以外的线程调用时,线程化。当前线程()返回一个\u读取对象。AFAICT,threading.local确实支持虚拟线程,但感觉很脆弱。特别是,由于读取,因此线程退出时不会清除存储。显然,我不希望内存泄漏 当我知道相关代码将始终

在PyQt应用程序中存储线程本地数据的最佳方法是什么?

我的应用程序既使用
QThread
s,也通过一些依赖项使用本机Python线程(来自
threading
模块)。我的线程本地存储的特定用例主要与前者相关

我可以看到一些选择

  • 使用
    threading.local
    。当从
    线程化
    以外的线程调用时,
    线程化。当前线程()
    返回一个
    \u读取
    对象。AFAICT,
    threading.local
    确实支持虚拟线程,但感觉很脆弱。特别是,由于
    读取
    ,因此线程退出时不会清除存储。显然,我不希望内存泄漏

  • 当我知道相关代码将始终在
    QThread
    中运行时,我可以直接将数据存储在通过获取的thread对象中。不知道如果从非Qt线程调用会发生什么

  • PyQt中是否有等效项?在Qt中,它是一个模板,而不是一个类,所以我认为它在PyQt中不可用


  • 你所说的“我有一种感觉,当线程退出时,存储区没有被正确地清除”是什么意思?您是否做过任何测试,为这一点提供了实际证据?如果有,则应报告为错误;如果不是的话,你的“感觉”似乎没有多大价值。我为模糊的表述道歉。我还没有测试它,但我一直在研究
    threading.local
    的Python实现。根据文档,a(怎么可能?没有可靠的方法知道它何时终止。)因此,由
    threading.local
    创建的数据存储永远不会被清除。