Are all of your processes connecting onto the same Impala Daemon, or are you using a load balancer / varying connection options?
Each Impala Daemon can only accept a finite total number of active client connections, which is likely what you are running into.
Typically for concurrent access to a DB, it is better to use a connection pooling pattern with finite connections shared between threads of a single application. This avoids overloading a target server.
While I haven't used it, pyodbc may support connection pooling and reuse which you can utilise via threads in python, instead of creating separate processes.