如果某个软件项目支持多版本处理已经向后移植到的Python版本,是否有理由使用threading.Lock
而不是multiprocessing.Lock
? multiprocessing
锁定也不是线程安全的吗?
就此而言,是否有理由使用来自threading
的{{1}}的任何同步原语?
答案 0 :(得分:15)
线程模块的同步原语比多处理更轻,更快,因为没有处理共享信号量等。如果你使用线程;使用线程的锁。进程应该使用多处理锁。
答案 1 :(得分:2)
我希望多线程同步原语更快,因为它们可以轻松使用共享内存区域。但我想你必须进行速度测试才能确定它。此外,您可能会有非常不需要的副作用(并且在文档中未指定)。
例如,进程锁定可以很好地阻止进程的所有线程。如果没有,释放锁可能不会唤醒进程的线程。
简而言之,如果您希望代码可以正常工作,那么在使用线程时应使用线程同步原语,如果使用进程则应使用进程同步原语。否则,它可能仅适用于您的平台,甚至只适用于您的特定版本的Python。
答案 2 :(得分:0)
multiprocessing
和threading
包的目标略有不同,尽管两者都是并发相关的。 threading
在一个进程中协调线程,而multiprocessing
提供用于协调多个进程的线程类接口。
如果您的应用程序没有产生需要数据同步的新进程,multiprocessing
的权重会更加重,threading
包应该更适合。