代码之家  ›  专栏  ›  技术社区  ›  Jason Baker

有没有理由使用threading.lock over multiprocessing.lock?

  •  11
  • Jason Baker  · 技术社区  · 15 年前

    如果一个软件项目支持一个多处理已经返回到的python版本,有没有理由使用 threading.Lock 结束 multiprocessing.Lock ?会吗 multiprocessing 锁也不是线程安全的?

    就这点而言,有没有理由使用 任何 同步原语来自 threading 那也是在 多重处理 ?

    3 回复  |  直到 15 年前
        1
  •  15
  •   jnoller    15 年前

    线程模块的同步原语比多处理更轻、速度更快,这是由于缺少处理共享信号量等问题。如果您正在使用线程,请使用线程锁。进程应该使用多进程的锁。

        2
  •  2
  •   PierreBdR    15 年前

    我希望多线程同步原语速度更快,因为它们可以轻松地使用共享内存区域。但我想你必须进行速度测试才能确定。另外,你可能会有一些副作用,这些副作用是非常不需要的(在医生中没有说明)。

    例如,进程锁可以很好地阻塞进程的所有线程。如果没有,释放锁可能不会唤醒进程的线程。

    简而言之,如果您希望您的代码确实有效,那么如果您使用的是线程,那么应该使用线程同步原语;如果您使用的是进程,那么应该使用进程同步原语。否则,它可能只在您的平台上工作,甚至只在特定版本的Python上工作。

        3
  •  0
  •   notnoop    15 年前

    multiprocessing threading 包的目标略有不同,尽管两者都与并发相关。 螺纹加工 在一个进程内协调线程,而 多重处理 为协调多个进程提供类似线程的接口。

    如果应用程序不生成需要数据同步的新进程, 多重处理 有点重,而且 穿线 包装应该更适合。