我是否应该使用锁来写入 class 变量(在线程处理期间),即使每个变量未被其他线程 accessed/written 写入?

Should I use a lock to write to class variables (during threading) even if each variable is not accessed/written into by other threads?

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

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

中的变量

我是否应该在写入这些变量的过程中在 class 中实施锁定机制?

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

如果每个线程访问的内存是独立的那么你不需要任何同步。如果您计划之后从主线程访问这些结果,则最后需要进行一些同步,但等待工作线程完成就足够了。

这是一般的答案。 Python 的线程由于 GIL 而受到限制,因此您可能根本不需要任何东西。您也不会看到预期的加速。

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

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

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