Python 3 auf Facebook

Ursprünglicher Autor: Jake Edge
  • Übersetzung
Hallo an alle!

Der fünfte Jubiläums-Thread des Python Developer- Kurses wurde gestartet . Vor dem Start jedes Streams wird häufig gefragt, welche Version wir im Training verwenden (sowohl im Allgemeinen als auch nicht nur, egal wie seltsam es klingen mag, wenn man bedenkt, wie der Kurs Python genannt wird) und welche unterschiedlichen Nuancen der Migration von einer Version zur anderen bestehen. Heute möchten wir einen Artikel über die Migrationserfahrung von 2 auf 3 auf Facebook veröffentlichen, der auf PyConf erzählt wurde.

Lass uns gehen.

Der Übergang zu Python 3 ist in den letzten Jahren viel populärer geworden, aber der Prozess ist noch lange nicht abgeschlossen. In der Infrastruktur vieler großer Unternehmen, die Python verwenden, bleiben große Python 2.7-Codeblöcke übrig, und Facebook ist keine Ausnahme. Jason Fried besuchte die PyCon 2018, um über Veränderungen in den letzten 4 Jahren zu sprechen - zu Beginn war Python 3 fast nicht mehr vorhanden, aber schließlich wurde es zur Hauptversion von Python im Unternehmen. Jason hat dazu beigetragen, dieses Ziel zu erreichen, und sein Bericht [Video auf YouTube] ist eine großartige Ideenquelle für andere Organisationen, die migrieren möchten.

Fried begann 2011 auf Facebook zu arbeiten und erkannte schnell, dass er Python lernen musste, um den Code schneller überprüfen zu können. Wenig später wurde ihm klar, dass er die wichtigste treibende Kraft für den Wechsel zu Python 3 auf Facebook geworden war. Dies war nie Teil seiner Pläne und es geschah von selbst, als er mit Python arbeitete.



Fried begann mit einer aktiven Teilnahme an der internen Python-Gruppe und war oft der erste, der bereit war, auf eventuell auftretende Fragen zu antworten. Infolgedessen wurde er unter den Pythonisten auf Facebook berühmt („eher schlechtes Ansehen“), indem er den Code selbst festlegte, ohne um Erlaubnis zu bitten, wenn er feststellte, dass die Sprache falsch verwendet wurde. Dies ist bei Facebook möglich, da keine vertikale Kontrollhierarchie vorhanden ist. Jeder hat so viele Rechte, Ihre Änderungen rückgängig zu machen, wie Sie diese Änderungen zunächst vornehmen müssen. Im Laufe der Zeit haben diese Änderungen dazu beigetragen, die Autorität von Frayd in der Python-Facebook-Community zu stärken, was sich während des Migrationsprozesses als nützlich erweisen wird.

Laut Frayd brauchte es etwas Zeit und viel Diplomatie, etwas wie die Python-Version der Facebook-Skala zu ändern. Er wollte „die Geschichte erzählen, wie ich und ein paar andere Ingenieure in meiner Freizeit und ohne Autorität Python 3 zur Hauptversion auf Facebook gemacht haben“.

Im Jahr 2013 gab es eine rudimentäre Unterstützung für Python 3.3 auf Facebook. Es erschien als Teil der Aufgabe, dem Buildsystem Python 3-Unterstützung hinzuzufügen. Diese Aufgabe wurde jedoch durch die Unterstützung für Python 3 in den Facebook-Bibliotheken blockiert, die wiederum durch die fehlende Unterstützung für Python 3 im Build-System blockiert wurde. Die Situation ab "Trick-22" : Python 3 war "verfügbar", aber in der Facebook-Umgebung gab es keine Unterstützung.

Außerdem war Python 3 auf Facebook 2013 von negativen Stimmungen umgeben. Fast alle dachten, das Unternehmen würde einfach für immer in Python 2.7 bleiben. Man sprach auch von einer völlig anderen Sprache. Selbst Fried selbst sagte (in der inneren Gruppe), dass der Übergang zu Python 3 auf Facebook niemals stattfinden wird. Nur eine Person hat diese Aussage angefochten und angeboten, etwas dagegen zu unternehmen. In diesem Moment ignorierte Fried den Aufruf zum Handeln, dachte aber weiter über diese Idee nach.

Strahl der Hoffnung

Aber laut Freid war die Hoffnung warm. Im Januar 2013 nahm der „Linter“ vier Importe an__future__ (print_function, division, absolute_imports, andunicode_literals). Anfangs schienen sie die Lebensdauer der Python-2-Codebase zu verlängern und wurden überall hinzugefügt, so dass der Linter aufhörte zu fluchen. Dies hat letztendlich die Konvertierung von Modulen nach Python 3 vereinfacht.

Facebook bietet ein "universell verwendbares" Framework für die Serialisierung und Remote-Aufrufe von Apache Thrift- Prozeduren . Und seine außergewöhnliche Kompatibilität mit Python 2 wurde zum Hauptblocker. In einer von der Thrift-Gruppe auf Facebook durchgeführten Umfrage zu potenziell interessanten Neuerungen stellte sich die Unterstützung von Python 3 als beliebte Option heraus: Fried stimmte für ihn, aber nicht, weil er Python 3 fördern wollte. Er hatte einfach das Gefühl, dass die Python-2-Schnittstelle mit etwas von Java vergleichbar war und daher ein Refactoring erforderlich war.

Nach einem Vortrag von Guido van Rossum in San Francisco, San Francisco, zum Thema "Tulip", der sich als Modul- Asyncio herausstellte, änderte sich sein Denkprozess . Fried war schon immer ein Fan von asynchroner Programmierung in Python, hielt es jedoch aufgrund der Unterschiede zwischen den Frameworks (z. B. Twisted , Gevent ), die es bereitstellten , für fragmentiert . Tulip sah aus, als könnte es asynchrone E / A interoperabel machen. Der Vortrag war noch nicht beendet, und Frayd hatte bereits Kontakt mit dem Thrift-Facebook-Team. Er schlug vor, die Tulip-Unterstützung für Python 3 einzuführen und zusätzlich auf den Twisted-Port, Gevent und andere zu warten. Ein paar Tage später veröffentlichte Trift eine Roadmap, die die bevorstehende Unterstützung für Python 3 und Tulip zeigt.

Dies geschah Anfang 2014, aber seit einem halben Jahr hat sich nichts geändert. Benutzer sind nicht erschienen und hatten nicht vor, dies zu tun. Sie wussten nichts von Änderungen.

Neues Projekt

Im August 2014 startete Frayd ein Projekt zur Umschreibung des alten Dienstes. Zu diesem Zweck plante er zunächst Python 2 und gevent, stellte jedoch fest, dass die Arbeiten zum Zeitpunkt der Fertigstellung bereits veraltet waren. Jemand muss der Erste sein, der eine Änderung vornimmt. für Facebook und Python 3 wurde es gebraten. "Sie sollten diese Person für Python 3 in Ihrer Organisation werden."

Also begann er sein Projekt mit Python 3 und "alles war kaputt"; Kein Wunder, dass niemand Python 3 verwendet hat. Das Build-System konnte seinen Code nicht einmal abrufen, und alle Radpakete von Drittanbietern waren nur für Python 2 verfügbar. Und als er genug Dinge repariert hatte, um seinen Dienst aufzubauen, stürzte er beim Start sofort ab - wegen etwas tief im Code, der den Einstiegspunkt bei Facebook eingerichtet hat.

Um den Code zum Laufen zu bringen, musste Frayd alles andere reparieren. Er baute Hunderte Räder von Drittanbietern um, um mit beiden Python-Versionen zu arbeiten, und aktualisierte alle internen Bibliotheken, um sie mit 2/3 kompatibel zu machen. Jeden Tag verpflichtet sich jemand dazu, seine Abhängigkeiten nur für Python 2 zu ändern. Es ist nicht überraschend, dass Fried es satt hat, Regressionen zu korrigieren. Die einzige Lösung besteht darin, die Einhaltung der Anforderungen von Python 3 innerhalb der Organisation durchzusetzen, dies ist jedoch auf Facebook nicht möglich. Wenn Sie sich jedoch so verhalten, als hätten Sie die Vollmacht, dies zu tun, werden die Leute anfangen zu glauben, dass Sie wirklich über sie verfügen.

Fried nutzte seinen sozialen Einfluss und fügte Pyflakes Linter zum Build-Prozess hinzu. Angesichts der Verfügbarkeit von PEP 8Er begründete das Hinzufügen einer neuen, indem er eine andere Kategorie von Code-Problemen löste; Außerdem hatten Pyflakes weniger Fehlalarme, was die Entwickler weniger störte. Frayd hat alles so eingestellt, dass Pyflakes mit dem gesamten Code, der in der Überprüfung gesendet wurde, zuerst für Python 2 und dann für Python 3 ausgeführt wurde. Dies half, die Arbeit zur Einhaltung von Python 3 unter allen Entwicklern zu verteilen, wodurch Fortschritte im Fried-Projekt erzielt werden konnten.

Zunächst musste er den Leuten erklären, dass der Linter nicht kaputt war, und es ist sinnvoll, den Code so zu modifizieren, dass er mit Python 3 kompatibel ist. Wenn die Entwickler den Übergang zu Python 3 für zu kompliziert hielten, wären sie auf die Idee „Für immer bei Python 2 bleiben“ zurückgekehrt. Mit Hilfe von Frayd ist es jetzt viel einfacher geworden, Code mit Python 3 kompatibel zu machen. "Plug in the linter" und daher Freid selbst ist einfacher geworden, als sich über die Notwendigkeit zu beschweren, den Code bearbeiten zu müssen.

Schulung

All dies hat dazu beigetragen, die „Blutung“ zu stoppen, hat aber nicht dazu beigetragen, bei der Implementierung von Python 3 auf Facebook spürbare Fortschritte zu erzielen. Fried schloss sich dem Team an, das neuen Mitarbeitern Python beibrachte. Der Linter gab bereits Fehler, wenn der Code nicht mit 2 oder 3 kompatibel war, aber Fried wollte den Punkt erreichen, an dem der mit 2/3 kompatible Code nur für Projekte geschrieben wurde und der neue Code nur in Python 3 geschrieben wurde. Erneut nahm Fried mit Situation in der Hand: Um diese Aussage zu treffen, änderte er 2015 die Folien der Python-Klasse für neue Mitarbeiter. Die Idee war, dass Facebook zu einem unbekannten Zeitpunkt in der Zukunft zu Python 3 wechseln möchte, sodass es keinen Sinn macht, Code für Python 2 zu schreiben - irgendwann muss er neu geschrieben werden. Er erklärte den Anfängern, dass dies alles innerhalb der Facebook-Infrastruktur funktionieren und Systeme bauen sollte, und wenn dies nicht möglich war, mussten Sie einen Fehler senden oder alles selbst beheben. "Seltsamerweise hat es funktioniert."

Im Januar 2015 hat Fried sein Projekt endgültig veröffentlicht. Den Rest des Jahres verbrachte er damit, den Leuten von seinem Erfolg und der Notwendigkeit des Wechsels zu Python 3 zu erzählen. Während des Jahres erschienen neue Verbündete, als er auf Facebook zu Python 3 wechselte.



Einer von ihnen war Luka Langa (Łukasz Langa), der „irgendwie Instagram davon überzeugte, zu Python 3 zu wechseln“. 2016 bildete Lang auf Facebook ein neues Team, das für die Überwachung von Python zuständig war, das als „Ministerium für dumme Spaziergänge“ bezeichnet wurde . Da es sich um das "Python-Team" handelte, arbeitete die oben erwähnte "fiktive Behörde"; Die Leute dachten, sie könnten auf Facebook Entscheidungen über Python treffen.

Im Jahr 2016 stieg der Einsatz von Python 3 im Unternehmen langsam, aber stetig an. Er wurde bei Meetings angesprochen und in neuen Projekten eingesetzt. Die Meinung hat sich geändert, obwohl Python 3 immer noch nicht als Standardversion betrachtet wurde und Projekte freiwillig dazu entschieden haben. Im Mai 2016 gab Fried seine Absicht bekannt, das Buildsystem standardmäßig auf Python 3 umzustellen. Die Idee wurde voll unterstützt, so dass nach wenigen Tagen die Umstellung durchgeführt wurde - ohne negative Folgen.

Ende 2016 veröffentlichte das Projektteam einen Bericht mit den Ergebnissen der Umstellung auf Python 3. Die Entwickler haben gerade 2to3 gestartetim Code und korrigierte alle Momente, für die er schwur. Als der resultierende Code gestartet wurde, wurde festgestellt, dass er 40% schneller ist und nur die Hälfte des Speichers benötigt. Dies deutete auf einen Mythos, auf den Frayd häufig stieß: Python 3 ist langsamer als Python 2. Dies könnte für frühere Versionen von Python 3 zutreffen, dies ist jedoch jetzt nicht relevant.

Gute Dinge

Zu Beginn des Jahres 2017 hat Instagram die Migration zu Python 3 abgeschlossen, und Facebook hat die Vorteile einer "glorreichen Zukunft, in der Sie gute Dinge genießen können", geerntet. Das Aktualisieren der Python-Version war kein so gruseliger Prozess und eröffnete die Möglichkeit, neue Funktionen zu nutzen. Facebook-Entwickler können sich jetzt auf Probleme wie neue statische Typisierungsfunktionen oder die Migration von Diensten für die Verwendung von Asyncio konzentrieren. "Python auf Facebook hat wieder Spaß gemacht."

Ein neues Problem: Die Benutzer fragen, wann Sie die Unterstützung für Python 2 aufgeben können. Wenn Regressionen zur Unterstützung von Python 2-Bibliotheken oder -Modulen auftreten, fragen Entwickler häufig, ob sie einfach zu Python 3 wechseln können. Das Problem ist das Gegenteil von dem, das vor einigen Jahren bestand. "Oh, wie schön ist die Welt, in der ich lebe."

Während des Vortrags zeigte Fried eine grafische Darstellung der Einstiegspunkte in den Python-Service von Facebook, beginnend mit dem dritten Quartal 2015 - damals waren es insgesamt 4 Python 3. Zum Zeitpunkt des Übergangs zu Python 3 waren Mitte 2016 bereits 4% aller Punkte vorhanden Python 3. Im März 2018 lag ihre Zahl über 50%; Mitte Mai, zum Zeitpunkt der Vorlesung, gab es 55% der „von zehntausenden Facebook-Einstiegspunkten“. Laut Freid schämt sich das Unternehmen nun, Code zu schreiben, der nur mit Python 2 funktioniert.

Fried analysierte dann den Prozess. Er stellte fest, dass mehr getan werden muss, als einfach etwas Neues zu schaffen; Entwickler müssen dazu führen, dass "die Veränderung ist, die Sie sehen wollen". Es ist notwendig, Menschen anzuziehen, auch wenn sie nicht verstehen, dass sie helfen. Dazu tragen Linters und Unit-Tests bei. Es ist sehr wichtig, neuen Mitarbeitern zu vermitteln, wonach Sie suchen. Wenn Sie das Ergebnis erreicht haben, feiern Sie, während Sie die „guten Dinge“ genießen: Schreiben Sie „cooler Python-Code 3“. Der Rest wird auch sehen wollen, wie neue Funktionen genutzt werden können.

Fried beantwortete ein paar Fragen aus dem Publikum. Eine Frage war, wie eine solche Änderung in einer traditionelleren, hierarchischen Organisation vorgenommen werden kann. Fried schlug vor, es könnte sogar einfacher sein, da es nicht nötig ist, Tausende von Entwicklern zu überzeugen, sondern nur eine Kette von Managern, angefangen bei jemandem, der die Vorteile der Umstellung sieht. Auf der anderen Seite kann es schwieriger sein, wenn die Unternehmenskultur konservativ ist. Dies wird dazu beitragen, die Qualität des Codes zu verbessern. Eine andere Frage betraf einen unteilbaren Code, der nicht in mehrere Eingabepunkte aufgeteilt ist. Für eine solche Situation bot Fried an, von PyCon 2017 eine Instagram-Präsentation (Video auf YouTube) anzusehen.

Andere Organisationen können aus dieser Vorlesung eine Menge lernen. Es ist jedoch klar, dass es wichtig ist, einen starken Unterstützer zu haben, der bereit ist, den gesamten Prozess zu steuern und zu koordinieren. Unternehmen, die einen Übergang planen, benötigen jemanden wie Fried.

DAS ENDE

Wir warten auf eine Frage und Kommentare, die Sie hier hinterlassen oder direkt an Stas in seiner offenen Lektion richten können .

Jetzt auch beliebt: