私は経験豊富な研究のためにGitHubプロジェクトの大きなサンプルをクローンしています。私は80,000のプロジェクトをいくらかの並行性でダウンロードする方が速いと思っていますが、それはダウンロードするのが大変です。Javaで同時に80,000ダウンロードを取得するにはどうすればよいですか?
どのようにして〜1000プロセスを開始し、それぞれが終了した後に別のプロセスを開始できますか?あるいは、これについて別の方法で行くべきですか? GitHubのサーバーでは、これをずっと速い速度でダウンロードすることは悪いことでしょうか?
ここでは、関連するコードは、これまでのところです:
// Create a CountDownLatch that will only reach 0 when all repositories
// have been downloaded
CountDownLatch doneSignal = new CountDownLatch(numberOfRepositories);
// Start the download for each git repository
for (String URL : gitURLs)
{
new Thread(new Worker(doneSignal, URL)).start();
}
doneSignal.await();
ワーカー:
public class Worker implements Runnable
{
private final CountDownLatch doneSignal;
private final String URL;
Worker (CountDownLatch doneSignal, String URL)
{
this.doneSignal = doneSignal;
this.URL = URL;
}
@Override
public void run()
{
try
{
// Run the command line process to download
ProcessBuilder pb =
new ProcessBuilder("git", "clone", "--depth=1", URL, "projects/" + getProjectName(URL));
Process p = pb.start();
p.waitFor();
}
catch (Exception e)
{
e.printStackTrace();
}
doneSignal.countDown();
}
}
とにかく、私はGithubのサーバーが同じIPから同時に多くのDLを起動させないと思う。 –
ええ、私は願っていません。 – Andrew