Python 循环的多重处理
我正在尝试创建一个脚本来克隆存储库,然后从本地repo中删除写访问权限。我有一个存储repo对象的列表,我迭代这个列表来克隆和锁定repo 我尝试使用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
多处理
来加速这项任务,但它似乎实际上减慢了它的速度
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:因为。