首页 > 解决方案 > python3.8多进程锁

问题描述

这是我在 MacOS 上的 python3.8 代码,但它会抛出 FileNotFoundError。在python3.6或python3.7上都可以。很奇怪!!!

# coding: utf-8
import time
from multiprocessing import Process, Lock


def task(name, lock):
    lock.acquire()
    print('%s 1' % name)
    time.sleep(1)
    print('%s 2' % name)
    lock.release()


if __name__ == '__main__':
    mutex = Lock()
    for i in range(3):
        p = Process(target=task, args=('Process %s' % i, mutex))
        p.start()

结果

......

"/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/multiprocessing/synchronize.py", line 110, in __setstate__
    self._semlock = _multiprocessing.SemLock._rebuild(*state)
FileNotFoundError: [Errno 2] No such file or directory

标签: multiprocessinglockingpython-3.8

解决方案


您需要在其中添加一个联接。请注意,不能保证进程将按照您的要求按数字顺序开始。您需要在流程开始之前添加延迟,以确保它以您期望的顺序添加到执行队列中。

# coding: utf-8
import time
from multiprocessing import Process, Lock


def task(name, lock):
    lock.acquire()
    print('%s 1' % name)
    time.sleep(1)
    print('%s 2' % name)
    lock.release()


if __name__ == '__main__':
    proceses = []
    mutex = Lock()
    for i in range(3):
        p = Process(target=task, args=('Process %s' % i, mutex))
        proceses.append(p)
        p.start()
    for p in proceses:
        p.join()

推荐阅读