Sua ideia inicial é absolutamente viável. Basta iniciar 10 threads de trabalho que aguardam entrada em uma mesma fila. Em seguida, seu processo de e-mail coloca os URLs nessa fila. O balanceamento de carga acontecerá automaticamente.
Se suas ligações SQL são thread-safe, você pode fazer o INSERT ou UPDATE nos threads de trabalho. Caso contrário, eu adicionaria mais um thread para o material SQL, aguardando entrada em uma fila diferente. Em seguida, seus threads de trabalho colocariam a consulta nessa fila e o thread SQL a executaria.
Se você pesquisar no Google por "fila de threads de trabalho python", encontrará alguns exemplos.