Sequential synchronization is pretty slow. I've implemented a simple concurrent synchronization feature that uses python's ThreadPoolExecutor: aureliony@658303f
It now runs over 10 times faster, and I haven't encountered any Canvas API rate limits so far.