Можете ли вы загрузить несколько файлов из Google Drive Asynchrony?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Можете ли вы загрузить несколько файлов из Google Drive Asynchrony?

Сообщение Anonymous »

Моя проблема заключается в следующей:
Я отправляю запросы через API Google Drive, который приносит все файлы, которые соответствуют определенным критериям. Я не буду размещать весь код здесь, так как он довольно обширный, но критерии запроса состоит в том, чтобы просто получить все файлы, которые принадлежат папкам с определенным именем (например: «Я хочу все файлы, которые находятся в папках, где имя папки содержит Строка «Meet '»).
Код, который я написал для этой конкретной части, является следующим: < /p>
import json
import environ
import os
import google.auth
import io
from apiclient import discovery
from httplib2 import Http
from google.cloud import secretmanager
from googleapiclient.http import MediaIoBaseDownload
from oauth2client.service_account import ServiceAccountCredentials

# Imported functions from a local file. Just writing to database and establishing connection
from firestore_drive import add_file, establish_db_connection

.... some other code here ...

def update_files_via_parent_folder(self, parent_id, parent_name):
page_token = None
# Set a query that fetches all files based on the ID of its parent folder
# E.g. "get all files from folder whose ID is parent_id"
query = f"'{parent_id}' in parents"
response = self.execute_query(query, page_token)
files = response.get('files', [])
while True:
# Execute the query, and extract all resulting files in the folder
for file in files:
file_id = file['id']
filename = file['name']
# Start requesting the current file from Drive, and download through a byte-stream
request = self.service.files().get_media(fileId=file_id)
fh = io.BytesIO()
downloader = MediaIoBaseDownload(fh, request)
done = False
dl_counter = 0
while done is False:
# Start downloading the file from Drive, and convert it to JSON (dictionary)
status, done = downloader.next_chunk()
prefab_json = json.loads(fh.getvalue())
# Find the proper collection-name and then add the file to database
collection_name = next(type_name for type_name in self.possible_types if type_name in parent_name)
add_file(self.db, collection_name, filename, file_content=prefab_json)

# Find out if there are more files to download in the same folder
page_token = response.get('nextPageToken', None)
if page_token is None:
if len(files) == 0:
print(f'Folder found, but contained no files.')
break
response = self.execute_query(query, page_token)
files = response.get('files', [])

def execute_query(self, query, page_token):
"""
Helper function for executing a query to Google Drive. Implemented as a function due to repeated usage.
"""
return self.service.files().list(
q=query,
spaces='drive',
fields='nextPageToken, files(id, name)',
pageToken=page_token).execute()

< /code>
Теперь мой вопрос:
Есть ли способ загрузить файлы асинхронно или параллельно в следующем разделе? < /p>
for file in files:
file_id = ...
filename = ...
# Same as above; start download and write to database...
< /code>
Для справки, точка кода состоит в том, чтобы извлечь файлы, расположенные на Google Drive, и скопировать их в другую базу данных. Я не обеспокоен локальным хранилищем, только с привлечением из диска и написанием в базу данных (если это даже можно сделать параллельно). < /P>
Я пробовал различные варианты, такие как многопроцессы .pool, Multiprocessing.threadpool и Asyncio, но я не уверен, что я действительно использовал их правильно. Я также могу упомянуть, что используемая база данных является Firestore. Облачная функция (которая имеет максимальный срок 540 секунды (9 минут)).
Любая обратная связь приветствуется :)

Подробнее здесь: https://stackoverflow.com/questions/706 ... chronously
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»