There were some dead-locking issues that I suspect were due to the way the global rate limit was handled. This changes it into a simple Event that allows multiple coroutines to pass through instead of one by one.
run_coroutine_threadsafe