Оператор модуля должен быть в порядке:
>>> int(uuid.uuid4()) % 3
2L
>>> int(uuid.uuid4()) % 3
1L
>>> int(uuid.uuid4()) % 3
2L
>>> int(uuid.uuid4()) % 3
1L
>>> int(uuid.uuid4()) % 3
1L
>>> int(uuid.uuid4()) % 3
0L
>>> int(uuid.uuid4()) % 3
1L
Но для будущего проектирования я бы предложил вам кодировать как минимум 16 шардов, например, с 16 разными именами хостов, указывающими на 3 разных хоста:
myhostname00 IN CNAME backend01
myhostname01 IN CNAME backend01
myhostname02 IN CNAME backend01
myhostname03 IN CNAME backend01
myhostname04 IN CNAME backend01
myhostname05 IN CNAME backend01
myhostname06 IN CNAME backend02
myhostname07 IN CNAME backend02
myhostname08 IN CNAME backend02
myhostname09 IN CNAME backend02
myhostname10 IN CNAME backend02
myhostname11 IN CNAME backend03
myhostname12 IN CNAME backend03
myhostname13 IN CNAME backend03
myhostname14 IN CNAME backend03
myhostname15 IN CNAME backend03
Таким образом, в будущем вы сможете создавать больше внутренних серверов и перемещать туда пользователей без изменения кода. Вы даже можете иметь неравномерно распределенных пользователей, если у вас когда-нибудь будут серверы бэкэнда, которые будут менее производительными, чем другие.