• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

学习Python3 互斥锁遇到的mac系统遇到的错误 FileNotFoundError: [Errno 2] No such file or directory

开发技术 开发技术 1周前 (05-04) 5次浏览

学习Python3 互斥锁遇到的mac系统遇到的错误 FileNotFoundError: [Errno 2] No such file or directory

mac系统
python3.4更新后,默认用“spawn”,开启进程,我们要主动指定为“fork”
spawn:使用此方式启动的进程,只会执行和 target 参数或者 run() 方法相关的代码。Windows 平台只能使用此方法,事实上该平台默认使用的也是该启动方式。相比其他两种方式,此方式启动进程的效率最低。
fork:使用此方式启动的进程,基本等同于主进程(即主进程拥有的资源,该子进程全都有)。因此,该子进程会从创建位置起,和主进程一样执行程序中的代码。注意,此启动方式仅适用于 UNIX 平台,os.fork() 创建的进程就是采用此方式启动的。
forserver:使用此方式,程序将会启动一个服务器进程。即当程序每次请求启动新进程时,父进程都会连接到该服务器进程,请求由服务器进程来创建新进程。通过这种方式启动的进程不需要从父进程继承资源。注意,此启动方式只在 UNIX 平台上有效。

from multiprocessing import Process, Lock
import time
import multiprocessing


def task(name, mutex):
    with mutex:
        print("%s 1" % name)
        time.sleep(1)
        print("%s 2" % name)
        time.sleep(1)
        print("%s 3" % name)


if __name__ == '__main__':
    # 第一种解决办法 
    multiprocessing.set_start_method("fork")
    mutex = Lock()
    for i in range(3):
        p = Process(target=task, args=("子进程%s" % i, mutex))
        p.start()

from multiprocessing import Process, Lock
import time

def task(name, mutex):
    with mutex:
        print("%s 1" % name)
        time.sleep(1)
        print("%s 2" % name)
        time.sleep(1)
        print("%s 3" % name)


if __name__ == '__main__':

    """
    第二种解决办法
    您需要在其中添加联接。注意,不能保证过程将按您的要求按数字顺序启动。
    您需要在流程开始之前添加一个延迟,以确保按您期望的顺序将其添加到执行队列中。
    """
    processes = []
    mutex = Lock()
    for i in range(3):
        p = Process(target=task, args=('Process %s' % i, mutex))
        processes.append(p)
        p.start()
    for p in processes:
        p.join()


喜欢 (0)