So, "overwritten" isn't the right way to think about names and values in Python. You could think of names in Python as pointers. So GENGO_LANGUAGE_CACHE points to some value which is either None or an iterable. In the worst-case-scenario, we're not mutating the data structure, we're just doing an assignment so the name points to a different iterable. If that assignment happens while something else is iterating over the iterable, that's fine--the iterable it's iterating over isn't mutated or destroyed. So we should be all good here.

I don't know how long the call takes. The couple of times I did it, it seemed to come back pretty quick (less than one second). Regardless, I don't particularly care if we're doing 10 at a time. It's a burst, but it's a burst of (might as well pick an upper-bound moderately crazy value) 100--not a burst of 1,000 or something more intensive. I kind of think if they can't handle a burst of 100, then we shouldn't be using their service.