Heim > Backend-Entwicklung > Python-Tutorial > Python verwendet Ctypes, um die Ausführungsgeschwindigkeit zu verbessern

Python verwendet Ctypes, um die Ausführungsgeschwindigkeit zu verbessern

大家讲道理
Freigeben: 2016-11-10 15:06:14
Original
1605 Leute haben es durchsucht

Die ctypes-Bibliothek ermöglicht Entwicklern die Entwicklung mit Hilfe der C-Sprache. Diese Schnittstelle, die die C-Sprache einführt, kann uns bei vielen Dingen helfen, z. B. bei einigen kleinen Problemen, die den Aufruf von C-Code erfordern, um die Leistung zu verbessern. Dadurch können Sie auf Windows-Systemen auf die dynamischen Linkbibliotheken kernel32.dll und msvcrt.dll und auf Linux-Systemen auf die Bibliothek libc.so.6 zugreifen. Natürlich können Sie auch Ihre eigene kompilierte gemeinsam genutzte Bibliothek verwenden

Schauen wir uns zunächst ein einfaches Beispiel an. Wir verwenden Python, um Primzahlen innerhalb von 1.000.000 zu finden, wiederholen diesen Vorgang 10 Mal und berechnen die Laufzeit.

Supplier and Memoize

SQLite ist eine häufig verwendete Datenspeichermethode in Android. Beim Zugriff auf Datenbankdaten müssen Sie SQLiteOpenHelper verwenden.

Ein guter Datenbankverbindungscode sollte in der Lage sein, die folgenden Probleme zu lösen: a) Der Aufbau einer Instanz ist relativ ressourcenintensiv. b) Es ist am besten, Datenbankverbindungen wiederzuverwenden. c) OnUpdate und andere Methoden können nicht mit anderen Instanzen kombiniert werden während eines Ausführungskonflikts.

Es kann leicht so geschrieben werden

Suppliers.memoize(new Supplier() { @Override public SQLiteOpenHelper get() { return new ...;
  }
})
Nach dem Login kopieren

Dieser Code verwendet einige von Guava bereitgestellte Hilfsmethoden, um Supplier, Memoize und Logik zu implementieren. Wie der Name schon sagt, wird Lieferant im Allgemeinen als Fabrik, Generator, Erbauer und Verschluss verwendet. Memoize ähnelt dem Cache-Konzept. Sobald eine Instanz generiert wird, gibt sie bei nachfolgenden Aufrufen dieselbe Instanz zurück und ist threadsicher.

Dieses Schreiben hat mehrere Vorteile: Erstens wird die Instanz nur dann erstellt, wenn sie benötigt wird, und zweitens wird die Ausführung des Programms einfach mit memoize implementiert, wodurch sichergestellt wird, dass es nur eine gibt Instanzgenerierung.

Code-Injection

Glow nutzt häufig Code-Injection. Es macht unseren Code strukturierter, klarer und einfacher und spart gleichzeitig viel Entwicklungszeit.

Dagger 2 ist unser Tool zur Injektion. Interessierte Studierende sollten die Website besuchen, um mehr über die relevanten Inhalte zu erfahren. Zusätzlich zur Injektion verfügt es auch über einige Bonusfunktionen, mit denen wir Caching implementieren können, und es ist sehr einfach. Wir müssen nur einige zusätzliche Anmerkungen oder Schnittstellen verwenden.

@Singleton

Ich glaube, das sollte jedem bekannt sein. Dies ist eine häufig gestellte Frage bei Vorstellungsgesprächen. Einfach ausgedrückt handelt es sich um einen Singleton. Denn damit müssen Sie sich keine Gedanken mehr darüber machen, wie diese Instanzen zwischengespeichert werden.

@Singleton public class SingletonClass {  
}
Nach dem Login kopieren

@Reusable

Dies ist eine neue coole Funktion. Obwohl Singletons gut sind, sind die Instanzen manchmal zu groß, werden immer im Speicher gespeichert und können nicht recycelt werden. Sie werden möglicherweise vorerst nicht vom Programm verwendet, sodass es sich auf jeden Fall etwas verschwenderisch anfühlt. In vielen Fällen haben wir keine so strengen Anforderungen, dass wir nur eine Instanz benötigen. Wenn wir sie wiederverwenden können, ist eine erneute Verwendung nicht möglich, wenn bereits eine generierte Instanz vorhanden ist , und es ist keine Garantie erforderlich.

@Reusable public class ReusableClass {  
}
Nach dem Login kopieren

Lazy

Der Ort, an dem Lazy verwendet wird, unterscheidet sich etwas von den beiden vorherigen. @Singleton und @Reusable werden im Allgemeinen in Bereitstellungen oder Typdefinitionen verwendet, bei der Verwendung wird jedoch Lazy verwendet. Der Verwendungseffekt ähnelt dem eingangs erwähnten Anbieter und Memoize.

@Inject Lazy lazySQLiteOpenHelper;
Nach dem Login kopieren

Die SQLiteOpenHelper-Instanz wird hier erst generiert, wenn Sie mit dem Aufruf von lazySQLiteOpenHelper.get() beginnen. Sobald die erste Instanziierung abgeschlossen ist, geben nachfolgende Aufrufe das erste Ergebnis zurück.

Beobachtbar

Bei der Nutzung der App müssen viele Daten vom Server abgerufen werden. In unserer App stellen wir den Benutzern jeden Tag einige angepasste Inhalte zur Verfügung. Diese Inhalte werden sich kurzfristig nicht ändern. Es ist zu zeitaufwändig, sie jedes Mal vom Server abzurufen, aber es scheint nicht einfach zu sein, sie zu speichern in persistenten Speichern wie Datenbanken oder Dateien notwendig. Alles in allem scheint Speicher-Caching eine gute Wahl zu sein.

Dieser Cache muss also erstens die folgenden Funktionen bieten: Zweitens muss seine Struktur sehr einfach sein, da er an vielen Stellen verwendet werden muss -sicher.

Später war unser Implementierungsplan sehr einfach und nutzte einige von Retrofit und Observable bereitgestellte Methoden.

private static final long EXPIRE_MS = 5 * 60 * 1000; private Pair<Long, Observable>
Nach dem Login kopieren
cache; public synchronized Observable getDailyContent() { if (cache == null || cache.first + EXPIRE_MS < System.currentTimeMillis()) {
      cache = Pair.create(System.currentTimeMillis(), serverApi.getContent());
    } return cache.second;
  }
Nach dem Login kopieren

Der Kern dieser Methode besteht darin, das von Retrofit zurückgegebene Observable-Objekt zu verwenden. Anschließend stellt Observable eine Cache-ähnliche Cache-Methode bereit, sodass die Netzwerkanforderung nicht vor dem Abonnieren ausgegeben wird , aber einmal Mit dem Ergebnis erhalten nachfolgende Anrufer das gleiche Ergebnis.

Hinweis

Obwohl Caching gut, schnell und bequem zu verwenden ist, muss jeder während der Verwendung auf Datenaktualisierungen und Thread-Sicherheit achten, um schmutzige Daten zu vermeiden.

Von: http://www.jointforce.com/jfperiodical/article/3516

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage