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

时间:2009-12-30 14:33:22

标签: python multithreading process locking multiprocessing

如果某个软件项目支持多版本处理已经向后移植到的Python版本,是否有理由使用threading.Lock而不是multiprocessing.Lockmultiprocessing锁定也不是线程安全的吗?

就此而言,是否有理由使用来自threading的{​​{1}}的任何同步原语?

3 个答案:

答案 0 :(得分:15)

线程模块的同步原语比多处理更轻,更快,因为没有处理共享信号量等。如果你使用线程;使用线程的锁。进程应该使用多处理锁。

答案 1 :(得分:2)

我希望多线程同步原语更快,因为它们可以轻松使用共享内存区域。但我想你必须进行速度测试才能确定它。此外,您可能会有非常不需要的副作用(并且在文档中未指定)。

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

简而言之,如果您希望代码可以正常工作,那么在使用线程时应使用线程同步原语,如果使用进程则应使用进程同步原语。否则,它可能仅适用于您的平台,甚至只适用于您的特定版本的Python。

答案 2 :(得分:0)

multiprocessingthreading包的目标略有不同,尽管两者都是并发相关的。 threading在一个进程中协调线程,而multiprocessing提供用于协调多个进程的线程类接口。

如果您的应用程序没有产生需要数据同步的新进程,multiprocessing的权重会更加重,threading包应该更适合。