首页 > 解决方案 > 即使每个变量没有被其他线程访问/写入,我是否应该使用锁来写入类变量(在线程期间)?

问题描述

我有一个类可以解析很多字符串。有 6 个主要变量被 6 个线程写入。所有字符串的总字符数将超过 500,000 个字符。

每个线程独立工作,即它们的所有字符串都不会与其他字符串发生冲突或被其他字符串引用。这意味着所有线程在输入方面相互排斥,并且在输出时,它们只写入类中的变量。

在写入这些变量期间,我应该在类中实现锁定机制吗?

EDIT1:完成线程。但是,为了比较执行速度,我也同时运行。我发现顺序运行需要 1.44 秒,线程化需要 2.33 秒。我究竟做错了什么?

标签: pythonmultithreadingthread-safetylockingpython-multithreading

解决方案


如果您的类级别变量要由所有线程更新,您需要使用类级别锁,如下所示。

class Parser(object):
  sharedLock = threading.Lock()
  var1 = var2 = var3 = var4 = var5 = var6 = 0

  @classmethod
  def update(cls):
    with cls.sharedLock:
      # update your variables.

推荐阅读