Uw eerste idee is absoluut haalbaar. Start gewoon 10 werkthreads die wachten op invoer in één en dezelfde wachtrij. Vervolgens plaatst uw e-mailproces de url's in deze wachtrij. De taakverdeling gebeurt automatisch.
Als uw SQL-bindingen thread-safe zijn, kunt u de INSERT- of UPDATE-dingen in de worker-threads doen. Anders zou ik nog een thread toevoegen voor de SQL-dingen, wachtend op invoer in een andere wachtrij. Dan zouden uw werkthreads de query in deze wachtrij plaatsen, en de SQL-thread zou het uitvoeren.
Als u googled op "python worker threads queue" vindt u een paar voorbeelden.