循环多处理

时间:2017-07-14 14:24:06

标签: python multithreading subprocess

我正在尝试创建一个克隆存储库的脚本,然后从本地存储库中删除写访问权限。我有一个存储repo对象的列表,我遍历此列表以克隆并锁定repo。

我尝试使用multiprocessing来加快这项任务,但似乎实际上已经放慢了速度......

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秒。

1 个答案:

答案 0 :(得分:2)

尝试类似:

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