diff --git a/backend/generation.go b/backend/generation.go index 0c98edda..2b61f4ad 100644 --- a/backend/generation.go +++ b/backend/generation.go @@ -28,6 +28,7 @@ type genStruct struct { Type GenerateType } +var parallelJobs = runtime.NumCPU() var genTeamQueue chan *fic.Team var genQueue chan genStruct var inQueueMutex sync.RWMutex @@ -37,8 +38,11 @@ func init() { genTeamQueue = make(chan *fic.Team) genQueue = make(chan genStruct) inGenQueue = map[GenerateType]bool{} +} - for i := runtime.NumCPU(); i > 0; i-- { +func launchWorkers() { + log.Println("Running with", parallelJobs, "worker(s)") + for i := parallelJobs; i > 0; i-- { go consumer() } } diff --git a/backend/main.go b/backend/main.go index c2911dd2..5f44b47d 100644 --- a/backend/main.go +++ b/backend/main.go @@ -87,6 +87,7 @@ func main() { flag.StringVar(&fic.FilesDir, "files", "/files", "Request path prefix to reach files") var debugINotify = flag.Bool("debuginotify", false, "Show skipped inotofy events") flag.BoolVar(&skipInitialGeneration, "skipfullgeneration", skipInitialGeneration, "Skip the initial regeneration") + flag.IntVar(¶llelJobs, "jobs", parallelJobs, "Number of generation workers") flag.Parse() log.SetPrefix("[backend] ") @@ -97,6 +98,8 @@ func main() { rand.Seed(time.Now().UnixNano()) + launchWorkers() + log.Println("Creating submission directory...") if _, err := os.Stat(SubmissionDir); os.IsNotExist(err) { if err := os.MkdirAll(SubmissionDir, 0777); err != nil {