【问题标题】:python3.8 multiprocess Lockpython3.8多进程锁
【发布时间】:2020-08-24 03:36:33
【问题描述】:

这是我在 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

【问题讨论】:

    标签: multiprocessing locking python-3.8


    【解决方案1】:

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

    # 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()
    

    【讨论】:

      猜你喜欢
      • 2011-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-29
      • 2012-07-01
      • 1970-01-01
      相关资源
      最近更新 更多