当前位置:网站首页>Que peut faire une ligne de code?

Que peut faire une ligne de code?

2022-06-21 21:16:00 InfoQ

hello,Bonjour tout le monde,Je suis Jackpop,Diplômé de l'Université de technologie de Harbin,Une fois à Huawei、Ali et d'autres grands travaux d'usine,Si vous êtes intéressé par、Emploi、Il y a des doutes sur l'amélioration de la technologie, etc,Autant se faire des amis:

Je suisJackpop,Faisons un ami!

Il y a trop à faire!.Une ligne de code est suffisante pour accélérer l'exécution du programme au - delà de10000X!



La mise en cache est une technologie largement utilisée du bas vers le Haut,Avant ou arrière,Les programmeurs ayant une certaine expérience du développement ne devraient pas être étrangers à la mise en cache.La mise en cache est la mémoire qui permet l'échange de données à grande vitesse,C'est avant la mémoire etCPUÉchange de données,Donc le taux est rapide.

InPythonEn cours de développement,Certaines fonctions peuvent être appelées à plusieurs reprises,Si cette fonction prend moins de temps, il n'y a pas de mal à.

Mais,Si une fonction prend du temps10Minutes,Ou envoyer fréquemmentrestDemande,Alors le temps passe à une augmentation non linéaire.

Alors,Pour beaucoup de développeurs qui se plaignentPython,Est - il possible d'améliorer l'efficacité de son développement grâce à la mise en cache?

La réponse est oui.!

Cet article décrit comment utiliser la technologie de mise en cache,Réalisation1Augmentation du Code de lignePythonVitesse d'exécution.

LRU

Différents langages de programmation,Ça va être différent. Politique de mise en cache pour,Par exemple,Par hachage、Mise en cache de l'implémentation des files d'attente prioritaires, etc.Donc,,Différents langages de programmation,Les solutions mises en cache varient considérablement,Ça peut prendre quelques minutes.,Ça peut prendre des heures.

Mais,InPythonMoyenne,Kit standardfunctoolsUne sorte deLRU(Least Recently Used)Politique de mise en cache pour,Vous pouvez passer le paramètre, Pour définir le nombre de calculs récents mis en cache ,Si le paramètre passé estNone, Puis un cache infini sera mis en place .

Maintenant, Pour que tout le monde comprenne ,Prenons un exemple.,

import time as tt

def func():
 num = 0
 for i in range(10):
 num += i

 return num


def main():
 return func() + func() + func() + func() + func() + func() + func()


t1 = tt.time()
main()
print("Time taken: {}".format(tt.time() - t1))
# 9.05990e-6

Dans cet exemple, Des appels répétés funcFonctions, Le temps total est de 0.009Secondes.

En bas,Adoptionfunctools Sous le kit LRU Le cache court encore ,

import time as tt
import functools

@functools.lru_cache(maxsize=5)
def func():
 num = 0
 for i in range(10):
 num += i

 return num


def main():
 return func() + func() + func() + func() + func() + func() + func()


t1 = tt.time()
main()
print("Time taken: {}".format(tt.time() - t1))
# 4.768371e-06

Comparaison des données, Le temps d'exécution a été réduit de près de 50%.

En appelantlru_cacheHeure,Nécessite une configurationmaxsizeParamètres pour, Il représente le cache des derniers calculs de fonction ,Si le paramètre estnone Ne pas mettre en cache .

Par rapport à l'avant , Vous constaterez que l'utilisation du mécanisme de mise en cache peut varier considérablement dans le temps ,C'est parce que,Fonction d'appel répétée, Le processus de calcul doit être répété , Et avec le cache , Nous avons juste besoin de lire et d'écrire rapidement , Il n'est plus nécessaire de répéter le processus de calcul , Ça économisera beaucoup de temps .

Mais, Comme le processus de calcul précédent est relativement simple , Il ne s'agit que d'une simple addition , Le sens intuitif du temps n'est pas très fort .

Voici un autre exemple de la séquence Fibonacci .

Beaucoup d'étudiants ne sont pas étrangers aux séries Fibonacci , Un problème récurrent typique , Il apparaît aussi fréquemment dans les manuels scolaires .

Parce qu'il calcule Récursivement dans le processus , Les résultats des calculs précédents seront également utilisés , Il y aura donc plus de double comptage , Regardez d'abord le temps de calcul normal .

import time as tt

def fib(n):
 if n <= 1:
 return n
 return fib(n-1) + fib(n-2)

t1 = tt.time()
fib(30)
print(&quot;Time taken: {}&quot;.format(tt.time() - t1))
# 0.2073

Ajouter une [email protected]_cache(maxsize=5) Après,Regardez l'effet.:

import time as tt
import functools

@functools.lru_cache(maxsize=5)
def fib(n):
 if n <= 1:
 return n
 return fib(n-1) + fib(n-2)

t1 = tt.time()
fib(30)
print(&quot;Time taken: {}&quot;.format(tt.time() - t1))
# 1.811981e-05

0.2073 Comparaison des secondes 2.0981e-5 Il y a une différence entre les secondes 4Les ordres de grandeur,On y est presque.10000+X! Ce sentiment intuitif devrait être très fort .

Dans le cadre de quelques opérations simples , Même le double comptage ne fait pas de mal .Mais, S'il s'agit d'un calcul volumineux de données ou d'un calcul aussi long que la demande de réseau , Utiliser le mécanisme de mise en cache ,C'est tout.1 Le Code de ligne permet d'économiser beaucoup de temps . Cela permet d'économiser du temps par rapport au double comptage , C'est aussi plus facile que de définir des variables redondantes .


Marchandises sèches

Récemment,Pour votre commodité,Il m'a fallu un demi - mois pour rassembler toutes sortes de produits techniques secs recueillis au fil des ans,Cela comprend, sans s'y limiterPython、Apprentissage automatique、Apprentissage profond、Vision par ordinateur、Système recommandé、Linux、Ingénierie、Java,Contenu jusqu'à5T+,J'ai regroupé les liens de téléchargement des ressources individuelles en un seul document,La Table des matières est la suivante::

null
Toutes les marchandises sèches pour tout le monde,J'espère qu'un peu de soutien!

https://pan.baidu.com/s/1eks7CUyjbWQ3A7O9cmYljA
 (Code d'extraction:0000)
原网站

版权声明
本文为[InfoQ]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/172/202206211933448115.html