15

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

就此而言,是否有理由使用其中的任何同步原threadingmultiprocessing

4

3 回答 3

20

由于缺乏处理共享信号量等,线程模块的同步原语比多处理更轻、更快。如果您使用线程;使用线程的锁。进程应该使用多进程的锁。

于 2009-12-30T16:03:58.233 回答
3

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

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

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

于 2009-12-30T14:39:03.697 回答
2

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

如果您的应用程序没有产生需要数据同步的新进程,multiprocessing那么重量会更大一些,并且threading包应该更适合。

于 2009-12-30T14:39:50.683 回答