Maison développement back-end Tutoriel Python Comment résoudre l'erreur d'opération IO trop fréquente dans le code Python ?

Comment résoudre l'erreur d'opération IO trop fréquente dans le code Python ?

Jun 24, 2023 pm 08:49 PM
性能优化 异步编程 缓存设计

Python, en tant que langage de programmation de haut niveau, a un large éventail d'applications dans le traitement des données et dans les programmes informatiques. Cependant, lors de l'exécution d'opérations de données complexes, le code Python est sujet à des problèmes de performances causés par des opérations d'E/S fréquentes. Dans cet article, nous présenterons comment résoudre l'erreur d'opérations d'E/S trop fréquente dans le code Python.

  1. Opérations d'E/S en cache

Lorsqu'un programme Python effectue des opérations d'E/S, les données doivent être lues à partir du disque ou d'autres périphériques de stockage, ce qui entraîne IO Les opérations fréquentes affectent les performances du programme. Pour éviter que cela ne se produise, nous pouvons utiliser des opérations d'E/S mises en cache.

La mise en cache des opérations IO fait référence à la mise en cache des résultats des opérations IO dans la mémoire au lieu de lire les données du disque à chaque fois. La mise en cache des opérations d'E/S peut améliorer les performances d'un programme car elle réduit le nombre de fois où le programme accède au disque.

Par exemple, le code suivant montre comment utiliser les opérations d'E/S mises en cache pour lire les données d'un fichier :

import functools

@functools.lru_cache(maxsize=128)
def read_file(filename):
    with open(filename) as f:
        return f.read()
Copier après la connexion

Dans cet exemple, lru_cache()</ Le La fonction code> est utilisée pour mettre en cache les résultats de la fonction. Lorsque la fonction est appelée pour la première fois, ses résultats seront mis en cache en mémoire. Lorsque la fonction est à nouveau appelée, si les paramètres n'ont pas changé, le résultat sera récupéré du cache au lieu de lire les données du disque. <code>lru_cache()函数被用来缓存函数的结果。当函数第一次被调用时,它的结果将会被缓存到内存中。当函数再次被调用时,如果参数没有变化,结果将从缓存中取回而不是从磁盘读取数据。

  1. 使用内存映射文件

内存映射文件是指将文件映射到进程的内存空间中,以便可以像操作内存一样访问文件。使用内存映射文件可以避免频繁的IO操作,特别是当处理大量数据时。

下面的代码展示了如何使用内存映射文件读取大型CSV文件:

import mmap
import csv

def read_csv(filename):
    with open(filename, "rb") as csv_file:
        with mmap.mmap(csv_file.fileno(), 0, access=mmap.ACCESS_READ) as csv_data:
            reader = csv.reader(iter(csv_data.readline, b""))
            for row in reader:
                # do something with row
Copier après la connexion

在这个例子中,mmap()函数被用来将文件映射到进程的内存空间中。然后,csv.reader()函数被用来读取CSV文件中的每一行。由于文件已经被映射到内存中,因此读取数据时不需要任何IO操作,因此程序的性能得到了很大的提升。

  1. 批量读取数据

另一种减少IO操作频率的解决方案是批量读取数据。这意味着一次读取多个数据,而不是每次读取一个数据。

例如,假设我们有一个包含1000个整数的文件。如果我们需要将文件中的所有整数加起来,我们可以使用下面的代码:

total = 0
with open("data.txt") as f:
    for line in f:
        total += int(line)
Copier après la connexion

但是,这种做法会频繁地从磁盘读取数据,从而影响程序性能。相反,我们可以使用下面的代码一次性批量读取数据:

with open("data.txt") as f:
    data = f.read().splitlines()
total = sum(map(int, data))
Copier après la connexion

在这个例子中,read()函数被用来一次性读取整个文件。然后,splitlines()函数被用来将文件内容分割成行,并存储在一个列表中。最后,map()函数被用来将每个行转换成整数,并计算它们的总和。这种方法可以减少IO操作频率,提高程序的性能。

  1. 使用异步IO操作

异步IO操作是指在执行IO操作时,程序可以同时执行其他任务。与传统的同步IO操作(在执行IO操作时程序必须等待IO操作完成然后才能继续执行其他任务)不同,异步IO操作可以提高程序的并发性和吞吐量。

Python 3.4引入了asyncio库,它提供了一种方便的方式来执行异步IO操作。下面是一个使用asyncio库读取URL内容的例子:

import asyncio
import aiohttp

async def fetch_url(url):
    async with aiohttp.ClientSession() as session:
        async with session.get(url) as response:
            return await response.text()

async def main():
    urls = [...]
    tasks = []
    for url in urls:
        tasks.append(asyncio.ensure_future(fetch_url(url)))
    results = await asyncio.gather(*tasks)
    # do something with results

asyncio.run(main())
Copier après la connexion

在这个例子中,fetch_url()函数被用来异步读取URL内容。然后,main()

    Utiliser des fichiers mappés en mémoire

    #🎜🎜#Les fichiers mappés en mémoire font référence au mappage de fichiers dans l'espace mémoire du processus afin qu'ils puissent be Accédez aux fichiers tout comme à la mémoire d’exploitation. L'utilisation de fichiers mappés en mémoire peut éviter les opérations d'E/S fréquentes, en particulier lors du traitement de grandes quantités de données. #🎜🎜##🎜🎜#Le code suivant montre comment lire un gros fichier CSV à l'aide d'un fichier mappé en mémoire : #🎜🎜#rrreee#🎜🎜#Dans cet exemple, la fonction mmap() est utilisé pour mapper les fichiers dans l'espace mémoire du processus. Ensuite, la fonction csv.reader() est utilisée pour lire chaque ligne du fichier CSV. Étant donné que le fichier a été mappé en mémoire, aucune opération d'E/S n'est requise lors de la lecture des données, les performances du programme sont donc grandement améliorées. #🎜🎜#
      #🎜🎜#Lire les données par lots#🎜🎜##🎜🎜##🎜🎜#Une autre solution pour réduire la fréquence des opérations d'E/S consiste à lire les données par lots. Cela signifie lire plusieurs données à la fois au lieu de lire une donnée à la fois. #🎜🎜##🎜🎜#Par exemple, disons que nous avons un fichier contenant 1000 entiers. Si nous devons additionner tous les entiers du fichier, nous pouvons utiliser le code suivant : #🎜🎜#rrreee#🎜🎜# Cependant, cette approche lira fréquemment les données du disque, affectant ainsi les performances du programme. Au lieu de cela, nous pouvons utiliser le code suivant pour lire les données par lots à la fois : #🎜🎜#rrreee#🎜🎜#Dans cet exemple, la fonction read() est utilisée pour lire l'intégralité du fichier à une fois. Ensuite, la fonction splitlines() est utilisée pour diviser le contenu du fichier en lignes et les stocker dans une liste. Enfin, la fonction map() permet de convertir chaque ligne en entier et de calculer leur somme. Cette méthode peut réduire la fréquence des opérations d'E/S et améliorer les performances du programme. #🎜🎜#
        #🎜🎜#Utiliser des opérations d'E/S asynchrones#🎜🎜##🎜🎜##🎜🎜#Les opérations d'E/S asynchrones signifient que lors de l'exécution d'opérations d'E/S, le programme peut effectuer d'autres tâches en même temps. en même temps. Contrairement aux opérations d'E/S synchrones traditionnelles (lors de l'exécution d'opérations d'E/S, le programme doit attendre la fin de l'opération d'E/S avant de continuer à effectuer d'autres tâches), les opérations d'E/S asynchrones peuvent améliorer la concurrence et le débit du programme. #🎜🎜##🎜🎜#Python 3.4 a introduit la bibliothèque asyncio, qui fournit un moyen pratique d'effectuer des opérations d'E/S asynchrones. Voici un exemple d'utilisation de la bibliothèque asyncio pour lire le contenu d'une URL : #🎜🎜#rrreee#🎜🎜#Dans cet exemple, la fonction fetch_url() est utilisée pour lire de manière asynchrone Obtenez le contenu de l'URL. La fonction main() est ensuite utilisée pour effectuer plusieurs opérations d'E/S asynchrones simultanément et traiter les résultats une fois toutes les opérations terminées. L'utilisation d'opérations d'E/S asynchrones peut éviter des opérations d'E/S trop fréquentes et améliorer les performances du programme. #🎜🎜##🎜🎜#Dans le résumé, nous avons présenté comment résoudre l'erreur des opérations d'E/S trop fréquentes dans le code Python. L'utilisation de technologies telles que les opérations d'E/S mises en cache, les fichiers mappés en mémoire, la lecture par lots de données et les opérations d'E/S asynchrones peuvent réduire efficacement la fréquence des opérations d'E/S, améliorer les performances du programme et éviter les erreurs causées par les opérations d'E/S. En tant que programmeurs Python, nous devons connaître ces techniques et les utiliser en cas de besoin. #🎜🎜#

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Technologie d'optimisation des performances et d'expansion horizontale du framework Go ? Technologie d'optimisation des performances et d'expansion horizontale du framework Go ? Jun 03, 2024 pm 07:27 PM

Afin d'améliorer les performances des applications Go, nous pouvons prendre les mesures d'optimisation suivantes : Mise en cache : Utilisez la mise en cache pour réduire le nombre d'accès au stockage sous-jacent et améliorer les performances. Concurrence : utilisez des goroutines et des canaux pour exécuter des tâches longues en parallèle. Gestion de la mémoire : gérez manuellement la mémoire (à l'aide du package non sécurisé) pour optimiser davantage les performances. Pour faire évoluer une application, nous pouvons mettre en œuvre les techniques suivantes : Mise à l'échelle horizontale (mise à l'échelle horizontale) : déploiement d'instances d'application sur plusieurs serveurs ou nœuds. Équilibrage de charge : utilisez un équilibreur de charge pour distribuer les requêtes à plusieurs instances d'application. Partage de données : distribuez des ensembles de données volumineux sur plusieurs bases de données ou nœuds de stockage pour améliorer les performances et l'évolutivité des requêtes.

Guide d'optimisation des performances C++ : découvrez les secrets pour rendre votre code plus efficace Guide d'optimisation des performances C++ : découvrez les secrets pour rendre votre code plus efficace Jun 01, 2024 pm 05:13 PM

L'optimisation des performances C++ implique une variété de techniques, notamment : 1. Éviter l'allocation dynamique ; 2. Utiliser les indicateurs d'optimisation du compilateur ; 3. Sélectionner des structures de données optimisées ; 4. Mettre en cache les applications ; Le cas pratique d'optimisation montre comment appliquer ces techniques lors de la recherche de la sous-séquence ascendante la plus longue dans un tableau d'entiers, améliorant ainsi l'efficacité de l'algorithme de O(n^2) à O(nlogn).

Optimiser les performances du moteur de fusée en utilisant C++ Optimiser les performances du moteur de fusée en utilisant C++ Jun 01, 2024 pm 04:14 PM

En créant des modèles mathématiques, en effectuant des simulations et en optimisant les paramètres, le C++ peut améliorer considérablement les performances des moteurs de fusée : créez un modèle mathématique d'un moteur de fusée et décrivez son comportement. Simulez les performances du moteur et calculez les paramètres clés tels que la poussée et l'impulsion spécifique. Identifiez les paramètres clés et recherchez les valeurs optimales à l'aide d'algorithmes d'optimisation tels que les algorithmes génétiques. Les performances du moteur sont recalculées sur la base de paramètres optimisés pour améliorer son efficacité globale.

Problèmes courants et solutions dans la programmation asynchrone dans le framework Java Problèmes courants et solutions dans la programmation asynchrone dans le framework Java Jun 04, 2024 pm 05:09 PM

3 problèmes et solutions courants dans la programmation asynchrone dans les frameworks Java : Callback Hell : utilisez Promise ou CompletableFuture pour gérer les rappels dans un style plus intuitif. Conflit de ressources : utilisez des primitives de synchronisation (telles que des verrous) pour protéger les ressources partagées et envisagez d'utiliser des collections thread-safe (telles que ConcurrentHashMap). Exceptions non gérées : gérez explicitement les exceptions dans les tâches et utilisez un cadre de gestion des exceptions (tel que CompletableFuture.exceptionally()) pour gérer les exceptions.

La voie de l'optimisation : explorer le parcours d'amélioration des performances du framework Java La voie de l'optimisation : explorer le parcours d'amélioration des performances du framework Java Jun 01, 2024 pm 07:07 PM

Les performances des frameworks Java peuvent être améliorées en implémentant des mécanismes de mise en cache, un traitement parallèle, l'optimisation des bases de données et en réduisant la consommation de mémoire. Mécanisme de mise en cache : réduisez le nombre de requêtes de base de données ou d’API et améliorez les performances. Traitement parallèle : utilisez des processeurs multicœurs pour exécuter des tâches simultanément afin d'améliorer le débit. Optimisation de la base de données : optimisez les requêtes, utilisez les index, configurez les pools de connexions et améliorez les performances de la base de données. Réduisez la consommation de mémoire : utilisez des frameworks légers, évitez les fuites et utilisez des outils d’analyse pour réduire la consommation de mémoire.

Comment le framework Golang gère-t-il la concurrence et la programmation asynchrone ? Comment le framework Golang gère-t-il la concurrence et la programmation asynchrone ? Jun 02, 2024 pm 07:49 PM

Le framework Go utilise les fonctionnalités de concurrence et asynchrones de Go pour fournir un mécanisme permettant de gérer efficacement les tâches simultanées et asynchrones : 1. La concurrence est obtenue via Goroutine, permettant d'exécuter plusieurs tâches en même temps. 2. La programmation asynchrone est implémentée via des canaux, qui peut être exécuté sans bloquer le thread principal;3. Convient aux scénarios pratiques, tels que le traitement simultané des requêtes HTTP, l'acquisition asynchrone des données de base de données, etc.

Comment utiliser le profilage en Java pour optimiser les performances ? Comment utiliser le profilage en Java pour optimiser les performances ? Jun 01, 2024 pm 02:08 PM

Le profilage en Java est utilisé pour déterminer la consommation de temps et de ressources lors de l'exécution d'une application. Implémentez le profilage à l'aide de JavaVisualVM : connectez-vous à la JVM pour activer le profilage, définir l'intervalle d'échantillonnage, exécuter l'application, arrêter le profilage et les résultats de l'analyse affichent une arborescence du temps d'exécution. Les méthodes permettant d'optimiser les performances comprennent : l'identification de méthodes de réduction des points chauds et l'appel d'algorithmes d'optimisation.

Optimisation des performances dans l'architecture de microservices Java Optimisation des performances dans l'architecture de microservices Java Jun 04, 2024 pm 12:43 PM

L'optimisation des performances pour l'architecture de microservices Java inclut les techniques suivantes : Utiliser les outils de réglage JVM pour identifier et ajuster les goulots d'étranglement des performances. Optimisez le garbage collector et sélectionnez et configurez une stratégie GC qui correspond aux besoins de votre application. Utilisez un service de mise en cache tel que Memcached ou Redis pour améliorer les temps de réponse et réduire la charge de la base de données. Utilisez une programmation asynchrone pour améliorer la simultanéité et la réactivité. Divisez les microservices, en divisant les grandes applications monolithiques en services plus petits pour améliorer l'évolutivité et les performances.

See all articles