python - 使用Python的多处理模块的同步问题

标签 python synchronization locking multiprocessing

当我从 Python 的多处理模块 page 运行以下代码时:

from multiprocessing import Process, Lock

def f(l, i):
    l.acquire()
    print 'hello world', i
    l.release()

if __name__ == '__main__':
    lock = Lock()

    for num in range(10):
        Process(target=f, args=(lock, num)).start()

有时我会得到无序的输出,例如:

hello world 0
hello world 1
hello world 2
hello world 4
hello world 3
hello world 6
hello world 5
hello world 7
hello world 8
hello world 9

请注意,4 在 3 之前打印,6 在 5 之前打印。为什么?

最佳答案

因为多处理的重点是并行。您的进程彼此同时运行,因此它们实际上可以按任何顺序启动和完成。

锁定获取仅确保它们不会尝试同时打印 - 但该锁定可以由各个进程以任何随机顺序获取。它更有可能被您创建的第一个进程获取,因为该进程将更快地完成初始化,因此很可能是第一个请求锁的进程。但无法保证订单。

关于python - 使用Python的多处理模块的同步问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15121859/

相关文章:

java - 在 Java 中调用 wait() 时,所有 Swing 框架都得到 "frozen"

C 多个进程访问的共享内存上的互斥锁

synchronization - NTP 往返延迟

java - 这个java程序中存在多线程冲突。怎么解释呢?

Mysql InnoDB 行锁定读取

java - 在Java中复制文件而不锁定原始文件

python - 追加到列表中导致值覆盖

python - 如何加速 postgresql 中的 copy_expert?

python - Bokeh - 如何在两个不同的选项卡中拥有相同的小部件(或复制小部件)?

python - 如何访问 pybluez 中的蓝牙低级功能?