Python:从线程中的对象读取值安全吗?

2024-09-30 01:34:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Python/wxPython程序,其中GUI是主线程,我使用另一个线程从文件加载数据。有时文件很大,加载速度慢,所以我使用wxPulse对话框来指示进度。在

当我加载文件时,我计算在计数线程中读取的行数,并在主线程的wxPulse对话框中显示这个计数。我通过读取加载线程正在写入的同一个变量来获得主线程中的计数。在

这是“线程安全”吗?这会不会有什么问题?我已经做了一段时间了,到目前为止一切都很好。在

我知道我可以用一个队列来传送计数,但我很懒,如果不必要的话我不想。在


Tags: 文件数据程序队列wxpythongui线程主线
3条回答

这很好,因为你只有一个writer线程。只读操作总是线程安全的。当您读取多个相关值并期望它们之间具有某种形式的一致性时,就会出现这种情况。由于写入可以在任何时候发生,所以多个值的读取可能不一致,甚至可能根本没有任何合理的程序状态。在这种情况下,锁用于使多个读取看起来像是一个单独的原子操作,而不是任何写操作。在

在普通python中,这是安全的,因为对变量的所有访问都受GIL(全局解释器锁)的保护,这意味着对变量的所有访问都是同步的,因此一次只有一个线程可以这样做。唯一的问题是@Eloff指出,如果您需要读取多个值并需要它们保持一致-在这种情况下,您需要在某种访问控制中进行设计。在

一般只要。。。在

  • 你只有一条线在写,而且。。。在
  • 计数与显示值精确同步并不重要。。。在

很好。在

相关问题 更多 >

    热门问题