在效率和代码清晰性方面,决定使用线程或多处理时应遵循哪些良好准则?
线程和多处理之间的许多差异并不是真正针对Python的,某些差异特定于某个Python实现。
对于CPython,multiprocessing在以下情况下,我都将使用该模块:
multiprocessing
由于性能原因,我需要同时使用多个内核。使用线程时,全局解释器锁(GIL)将阻止任何加速。(无论如何,有时在这种情况下您都ctypes可以避免使用线程,例如,当主要工作是在通过调用的C代码中完成或使用Cython并在适当的地方显式释放GIL时。当然,后者需要格外小心。)这种情况实际上很少见。大多数应用程序不受处理器时间的限制,如果确实如此,则通常不使用Python。
ctypes
我想稍后将我的应用程序变成一个真正的分布式应用程序。对于多处理应用程序而言,这要容易得多。
在要执行的任务之间几乎不需要共享状态。
在几乎所有其他情况下,我都会使用线程。(这包括使GUI应用程序具有响应能力。)