我想并行同步我所有的 vcs 目录。我将进入目录并运行特殊的命令行脚本来同步 git 或 mercurial 存储库。这是一个缓慢的过程,所以我想尝试使其并行。
但是我的并行线程为“当前目录”而战存在麻烦,所以我需要一些技巧来同时在不同的目录中工作。
当前解决方案:
def syncrepos(repos):
for r in repos.split("\n"):
if r:
print("------ repository: ", r)
thrd = ThreadingSync(r)
thrd.setDaemon(True)
thrd.start()
ThreadingSync 在哪里
class ThreadingSync(threading.Thread):
def __init__(self, repo):
threading.Thread.__init__(self)
self.repo = repo
def run(self):
r = self.repo.split("-t")
path = (r[0]).strip()
if len(r) < 2:
vcs = VCS.git
else:
vcs = {
'git' : VCS.git,
'git git' : VCS.git_git,
'git hg' : VCS.git_mercurial,
'git svn' : VCS.git_subversion,
'git vv' : VCS.git_veracity,
'hg hg' : VCS.hg_hg}[(r[1]).strip()]
os.chdir(path)
if vcs == VCS.git:
checkGitModifications()
gitSync()
... etc
并且gitSync
是
def gitSync():
pretty(cmd("git pull origin master"))
pretty(cmd("git fetch upstream master"))
pretty(cmd("git pull --rebase upstream master"))
pretty(cmd("git push -f origin master"))
当然这并不完美,但它完成了我的工作,我想加快速度。
如何为每个存储库/目录生成一个子进程(os.chdir 的安全实现)?