Question

Quel est le moyen le plus rapide d'obtenir un grand nombre de fichiers (relativement petits, 10 à 50 Ko) d'Amazon S3 à partir de Python? (Dans l’ordre de 200 000 millions de fichiers).

Pour le moment, j'utilise boto pour générer des URL signées et PyCURL pour récupérer les fichiers un par un.

Un type d'accès concurrentiel serait-il utile? Objet PyCurl.CurlMulti?

Je suis ouvert à toutes les suggestions. Merci!

Était-ce utile?

La solution

Dans le cas de python, comme il est lié à l'IO, plusieurs threads utiliseront le processeur, mais celui-ci n'utilisera probablement qu'un seul cœur. Si vous avez plusieurs cœurs, vous pouvez envisager le nouveau module multiprocesseur . Même alors, vous voudrez peut-être que chaque processus utilise plusieurs threads. Vous devrez modifier un certain nombre de processeurs et de threads.

Si vous utilisez plusieurs threads, c'est un bon candidat pour la File d'attente classe.

Autres conseils

Je ne connais rien au python, mais en général, vous voudriez décomposer la tâche en morceaux plus petits afin qu’ils puissent être exécutés simultanément. Vous pouvez le ventiler par type de fichier, par ordre alphabétique ou autre, puis exécuter un script distinct pour chaque partie de la panne.

Vous pouvez envisager d'utiliser s3fs et d'exécuter uniquement des commandes de système de fichiers simultanées. de Python.

J'utilise txaws avec twisted pour le travail sur S3, bien que vous souhaitiez probablement obtenir simplement l'URL authentifiée et utiliser twisted.web.client.DownloadPage (par défaut, il sera heureux de passer d'un flux à un autre sans trop interaction).

Twisted facilite l’exécution de la concurrence que vous souhaitez. Pour quelque chose de l'ordre de 200 000, je créerais probablement un générateur et utiliserais un coopérateur pour définir mon accès concurrentiel et laisserais simplement le générateur générer toutes les demandes de téléchargement requises.

Si vous n'êtes pas familier avec Twisted, vous constaterez que le modèle prend un peu de temps pour s'y habituer, mais ça en vaut vraiment la peine. Dans ce cas, je m'attendrais à ce que cela prenne un minimum de temps processeur et de mémoire, mais vous devrez vous soucier des descripteurs de fichiers. Il est assez facile de combiner un courtier de perspective et de répartir le travail sur plusieurs machines au cas où vous auriez besoin de plus de descripteurs de fichier ou si vous avez plusieurs connexions sur lesquelles vous souhaiteriez qu'il soit connecté.

Qu'en est-il du fil + file d'attente, j'aime beaucoup cet article: Programmation pratique en thread avec Python

Chaque travail peut être effectué avec les outils appropriés:)

Vous souhaitez utiliser python pour les tests de contrainte S3 :), je vous suggère donc de rechercher un programme de téléchargement de gros volumes et de lui transmettre un lien.

Sous Windows, j’ai de l’expérience dans l’installation du programme ReGet (shareware, tiré de http://reget.com ) et la création de téléchargement de tâches via l'interface COM.

Bien entendu, d’autres programmes avec une interface utilisable peuvent exister.

Cordialement!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top