For a project, I need a method of creating thousands of random strings while keeping collisions low. I\'m looking for them to be only 12 characters long and uppercase only.
For cryptographically strong pseudo-random bytes you might use the pyOpenSSL wrapper around OpenSSL.
It provides the bytes function to gather a pseudo-random sequences of bytes.
from OpenSSL import rand
b = rand.bytes(7)
BTW, 12 uppercase letters is a little bit more that 56 bits of entropy. You will only to have to read 7 bytes.