Parallel processing
Many of the instructors' tasks in travo, like collect and so on, are IO bound and embarrassingly parallel. So we could use concurrency. Of particular relevance are tasks that run autograde which take a non trivial amount of time.
Here is a quick experiment draft:
In [19]: def f(group): course.collect_scores("Semaine1", group, force_autograde=True)
In [20]: tasks = [ dask.delayed(f)(group) for group in course.student_groups ]
In [21]: res = dask.compute(tasks)
Notes:
- Making dask a dependency would be heavy-lifting. But we could make it an optional dependency and use it if available. Or use some more lightweight concurrency tool.
- Proper configuration of the number of concurrent tasks should be done to not overload GitLab.