Чтение и запись солений с помощью Google Cloud - PullRequest
0 голосов
/ 17 марта 2020

Я хочу прочитать существующий рассол (содержащий словарь), который хранится в папке внутри Google Cloud Bucket. Затем обновите рассол после выполнения некоторых функций, что эквивалентно перезаписи рассола.

Традиционно я хотел бы сделать что-то вроде:

import pickle
# Read pickle:
pickle_in = open('dictionary.pickle','rb')
my_dictionary = pickle.load(pickle_in)
my_dictionary 

# MODIFY DICTIONARY BY, FOR EXAMPLE, ADDING NEW REGISTERS

# Overwrite pickle:
pickle_out = open('dictionary.pickle','wb') 
pickle.dump(my_modified_dictionary,pickle_out)
pickle_out.close()

Теперь мне нужно сделать что-то подобное, но в Google Cloud , Поэтому мне нужно изменить путь к файлу и использовать cloudstorage.open ():

import pickle
my_path = '/bucket_name/pickle_folder/my_dictionary.pickle'

# Read pickle:
pickle_in = cloudstorage.open(path,'r')
my_dictionary = pickle.load(pickle_in)
my_dictionary 

# MODIFY DICTIONARY BY, FOR EXAMPLE, ADDING NEW REGISTERS

# Overwrite pickle:
pickle_out = cloudstorage.open(path,'w') 
pickle.dump(my_modified_dictionary,pickle_out)
pickle_out.close()

Будет ли это работать? cloudstorage.open () похоже на open (). Но я не уверен, что если я укажу путь при выводе метки, он будет перезаписывать метку в указанной папке.

1 Ответ

0 голосов
/ 18 марта 2020

Базовая c идея сделать чтение-изменение-запись из GCS возможна. Вы должны знать, что это не будет хорошо работать с параллелизмом - если второй процесс выполняет чтение до того, как первый выполнит обратную запись, то, когда второй процесс выполнит обратную запись, он потеряет изменения первого процесса. Лучшее решение для этого - использовать базу данных вместо GCS для травления.

Кроме того, следует помнить, что рассол небезопасен , и вы не должны загружать засолки, которые вы не написали .

Если вы все еще хотите использовать GCS для этого, вам следует использовать стандартную клиентскую библиотеку GCS , что-то вроде:

from google.cloud import storage

storage_client = storage.Client()

bucket = storage_client.bucket('your-gcs-bucket')
blob = bucket.blob('dictionary.pickle')
pickle_in = blob.download_as_string()
my_dictionary = pickle.loads(pickle_in)

# MODIFY DICTIONARY BY, FOR EXAMPLE, ADDING NEW REGISTERS

pickle_out = pickle.dumps(my_modified_dictionary)
blob.upload_from_string(pickle_out)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...