Google Drive API - Как правильно обрабатывать многопоточность и создание папок? - PullRequest
0 голосов
/ 28 августа 2018

У меня есть приложение, которое запускает задание pub / sub каждые пару минут.

Всякий раз, когда приложение обнаруживает, что папка не существует в Google Диске, оно правильно создает иерархию. Мне пришлось использовать многопоточность этого приложения, чтобы удовлетворить требования клиентов, и теперь создается несколько папок. Мне нужно логическое решение, лучшая практика или, возможно, понимание API, чтобы решить эту проблему.

Вот фрагмент кода:

if not output_folder:
    output_folder = drive_handler.create_folder_hierarchy  
                   (process_id, mail.get_date(), product, activity, team_drive_id)
    log_handler.log_hierarchy_created(mail, process_id)

def create_folder(self, name, team_drive_id, parent):
    properties = self.get_properties(parent)
    fields = 'kind, id, name, mimeType, parents, properties'
    body = {"name": name,
            "mimeType": "application/vnd.google-apps.folder",
            "parents": [parent],
            "teamDriveId": team_drive_id,
            "properties": properties}
    folder = self.service.files().create(body=body, supportsTeamDrives=True, fields=fields).execute()
    return folder

Я пробовал time.sleep (), задания cron на движке приложения, но я не чувствовал, что это лучший способ сделать это.

1 Ответ

0 голосов
/ 28 августа 2018

Вам нужна глобальная блокировка для всех потоков, а затем убедитесь, что проверка и создание каталога происходит в одном контексте:

из потокового импорта Lock

# Global variable
foo = Lock()

def check_create():
    with foo:
        # Check if directory exists
        # Create if it does not
    return folder

Этот пример псевдокода показывает идею. Теперь проверка и создание происходят в одном и том же контексте, и только один поток может иметь блокировку.

...