Hmm call_command_async throws an error without manage_py_dir. I looked at the code, it's because this is called as a separate process, and thus is not aware of the location of the calling process's manage.py. So that's why we have to pass it in every time.