Я новичок в программировании на Python и Azure.
Мне нужно написать скрипт, который будет выполняться 2 процессами.
2 процесса будут запускать один и тот же скрипт на Python.
Я знаю, что в Azure есть учетные записи для хранения некоторых файлов, я нашел это:
https://docs.microsoft.com/en-us/python/api/azure-storage-file/azure.storage.file.fileservice.fileservice?view=azure-python
и:
https://github.com/Azure/azure-storage-python
Вот некоторый псевдокод для иллюстрации того, что мне нужно достичь:
function useStorageFile
if(fileFromStorage == null)
createFileInStorage lockFileInStorage;
executeDockerCommand;
writeResultOFCommandInStorageFile;
else
if(fileFromStorage != null)
X:if(fileFromStorage.status !== 'locked')
readResultFromFile
else
wait 1s;
continue X;
Можно ли заблокировать / разблокировать файл в Azure? Как я могу достичь этого в Python, например? спасибо.
EDIT
Мне удалось написать файл в хранилище BLOB-объектов с помощью сценария Python. Теперь возникает вопрос: как я могу заблокировать файл во время записи результата команды в нем первым процессом и заставить его прочитать второй процесс, как только блокировка хранилища BLOB-объектов (если опция существует ...) будет снята первый процесс? Вот скрипт Python, который я использую:
import os, uuid, sys
from azure.storage.blob import BlockBlobService, PublicAccess
def run_sample():
try:
# Create the BlockBlockService that is used to call the Blob service for the storage account
block_blob_service = BlockBlobService(account_name='xxxxxx', account_key='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')
# Create a container called 'quickstartblobs'.
container_name ='quickstartblobs'
block_blob_service.create_container(container_name)
# Set the permission so the blobs are public.
block_blob_service.set_container_acl(container_name, public_access=PublicAccess.Container)
# Create a file in Documents to test the upload and download.
local_path=os.path.abspath(os.path.curdir)
local_file_name ='youss.txt'
full_path_to_file =os.path.join(local_path, local_file_name)
# Write text to the file.
file = open(full_path_to_file, 'w')
file.write("Hello, World!")
file.close()
print("Temp file = " + full_path_to_file)
print("\nUploading to Blob storage as blob" + local_file_name)
# Upload the created file, use local_file_name for the blob name
block_blob_service.create_blob_from_path(container_name, local_file_name, full_path_to_file)
# List the blobs in the container
print("\nList blobs in the container")
generator = block_blob_service.list_blobs(container_name)
for blob in generator:
print("\t Blob name: " + blob.name)
# Download the blob(s).
# Add '_DOWNLOADED' as prefix to '.txt' so you can see both files in Documents.
full_path_to_file2 = os.path.join(local_path, str.replace(local_file_name ,'.txt', '_DOWNLOADED.txt'))
print("\nDownloading blob to " + full_path_to_file2)
block_blob_service.get_blob_to_path(container_name, local_file_name, full_path_to_file2)
sys.stdout.write("Sample finished running. When you hit <any key>, the sample will be deleted and the sample "
"application will exit.")
sys.stdout.flush()
input()
# Clean up resources. This includes the container and the temp files
block_blob_service.delete_container(container_name)
os.remove(full_path_to_file)
os.remove(full_path_to_file2)
except Exception as e:
print(e)
# Main method.
if __name__ == '__main__':
run_sample()