Улучшенная обработка сериализации с помощью Redis, Pickle, Python3

#python-3.x #redis #pickle

Вопрос:

Я хотел бы повысить эффективность процесса сериализации / десериализации с использованием Redis Pickle Python 3.x. В 2.7 эти механизмы были простыми; в 3.x код, который я написал, кажется громоздким и непитоническим. Для тех, кто работает с Pickle и Redis, здесь есть несколько постов, посвященных механике кодирования / декодирования.

Повторяю: это работает, но кажется громоздким.

Базовые данные в python:

 machine_temp_drives = ('/ssd1', '/ssd2')
machine_perm_drives = ('/drive3')
 

Теперь выберите версию 0, чтобы избежать дальнейших проблем, с которыми я столкнулся. Это в значительной степени не изменилось по сравнению с Python 2.7, за исключением функции decode():

 temp_drives_pickle = pickle.dumps(machine_temp_drives,0).decode()
r.hset(machine_defaults, 'temp_drives_pickle', temp_drives_pickle)
perm_drives_pickle = pickle.dumps(machine_perm_drives,0).decode()
r.hset(machine_defaults, 'perm_drives_pickle', perm_drives_pickle)
 

Теперь распакуйте позже (другие клиенты получают это) с четырьмя инструкциями для каждого, на разработку которых у меня ушло довольно много времени. Для этого потребовалось бы две инструкции на каждую в предыдущих версиях Python 2.7:

 temp_drives_pickle= r.hget(machine_defaults, 'temp_drives_pickle')
temp_drives_string = temp_drives_pickle.decode()
temp_drives_bytes = temp_drives_string.encode()
temp_drives = pickle.loads(temp_drives_bytes)
perm_drives_pickle = r.hget(machine_defaults, 'perm_drives_pickle')
perm_drives_string = perm_drives_pickle.decode()
perm_drives_bytes = perm_drives_string.encode()
perm_drives = pickle.loads(perm_drives_bytes)
 

При печати temp_drives и perm_drives будут получены кортежи, как было первоначально объявлено.