Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 循环的多重处理_Python_Multithreading_Subprocess - Fatal编程技术网

Python 循环的多重处理

Python 循环的多重处理,python,multithreading,subprocess,Python,Multithreading,Subprocess,我正在尝试创建一个脚本来克隆存储库,然后从本地repo中删除写访问权限。我有一个存储repo对象的列表,我迭代这个列表来克隆和锁定repo 我尝试使用多处理来加速这项任务,但它似乎实际上减慢了它的速度 def install(): os.chdir(ROOT_DIR) if os.path.isdir("./repos"): for repo in getRepos(): os.chdir(ROOT_DIR) #Pr

我正在尝试创建一个脚本来克隆存储库,然后从本地repo中删除写访问权限。我有一个存储repo对象的列表,我迭代这个列表来克隆和锁定repo

我尝试使用
多处理
来加速这项任务,但它似乎实际上减慢了它的速度

def install():
    os.chdir(ROOT_DIR)
    if os.path.isdir("./repos"):
        for repo in getRepos():
            os.chdir(ROOT_DIR)
            #Process(target=repo.clone()).start()
            #Process(target=lock, args=(repo,)).start()
            repo.clone()
            lock(repo)
    else:
        os.mkdir("./repos")
        install()
这两行注释是我试图创建的子访问。我用错了吗

对于子进程,我的平均执行时间是:5.8秒 如果没有子进程,我的平均执行时间是:4.5秒。

尝试以下方法:

from multiprocessing import Pool

def processRepo(repo):
    repo.clone()
    lock(repo)


def install():
    os.chdir(ROOT_DIR)
    if os.path.isdir("./repos"):
        pool = Pool()
        pool.map(processRepo, getRepos())
        pool.close()
        pool.join()
    else:
        os.mkdir("./repos")
        install()
尝试以下方法:

from multiprocessing import Pool

def processRepo(repo):
    repo.clone()
    lock(repo)


def install():
    os.chdir(ROOT_DIR)
    if os.path.isdir("./repos"):
        pool = Pool()
        pool.map(processRepo, getRepos())
        pool.close()
        pool.join()
    else:
        os.mkdir("./repos")
        install()

您在每个循环迭代中创建流程,每个流程只在一个回购上工作。理想情况下,您希望委派一个组来处理其中的一部分。下面的答案为您解决了这个问题,但没有解释它的作用。您在每个循环迭代中创建流程,每个流程只在一个回购上工作。理想情况下,您希望委派一个组来处理其中的一部分。下面的答案为您解决了这个问题,但没有解释它的作用。这是好的,可能有效。但对你所做的解释肯定会对OP和未来的读者有所帮助。另外,包括来自多处理导入池的
完美!这使执行时间达到了3.4秒左右,为什么我不必将repo参数传递给processRepo?@APorter1031:因为。这很好,而且可能有效。但对你所做的解释肯定会对OP和未来的读者有所帮助。另外,包括来自多处理导入池的
完美!这使执行时间达到了3.4秒左右,为什么我不必将repo参数传递给processRepo?@APorter1031:因为。