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