Transparents - indico in2p3

publicité
LAMP tout en python devient LTEP
(Linux, Twisted, Elixir, Python)
et en plus GTK côté client
Sylvain Ferriol <[email protected]>
Journées Informatique IN2P3, 25 octobre 2012
Contexte
BD
Serveur /
Séquenceur
Journées informatique IN2P3
2
Une application type WEB
●
Système client serveur
●
Persistance dans une base de données
●
Notion de page (HTML,CSS, Javascript)
●
Client léger
Journées informatique IN2P3
3
Et en plus
●
Communication bidirectionnelle (WebSocket)
●
Synchronisation facile de plusieurs clients
●
Sans changer de langage
●
●
Utiliser la même librairie graphique qu'on
utilise pour faire une application classique
Développement rapide
Journées informatique IN2P3
4
Solution
●
●
Un seul langage : Python
Communication réseau: Twisted avec le
protocol Perspective Broker
●
Persistance des données : Elixir
●
Interface graphique du client : GTK
Journées informatique IN2P3
5
Partie Persistance : Elixir
●
Mapping objet-relationnel simple
●
Respecte le design pattern Active Record
●
Création automatique des tables et des clés
étrangères
Journées informatique IN2P3
6
Elixir : exemple
class Personne( Entity ):
nom = Field( String(128) )
age = Field( Integer )
adresses = OneToMany( 'Adresse' )
class Adresse( Entity ):
principale = Field( Boolean )
proprietaire = ManyToOne( 'Personne' )
Journées informatique IN2P3
7
Partie réseau : Twisted
●
« An event-driven networking engine »
●
Framework réseau basé sur TCP,UDP
●
●
●
Implémentation des protocoles : HTTP, FTP,
SSH, IRC, …, dans une même application.
Protocole « objet » : Perspective Broker (PB)
Programmation asynchrone s 'exécutant dans
un seul thread
Journées informatique IN2P3
8
Twisted : modèle synchrone
●
Une tâche après l'autre
●
Un seul flux d'exécution
Temps
Journées informatique IN2P3
9
Twisted : modèle multithread
●
Exécution en parallèle
●
Coordination complexe des flux d'exécution
●
Synchronisation difficile
Temps
Journées informatique IN2P3
10
Twisted : modèle asynchrone
●
●
●
●
Les tâches sont entrelacées
Enchaînement de petites étapes déclenchées par
des événements réseaux
Pas de parallélisme, synchronisation facile
Programmation plus complexe car non
séquentielle
Temps
Journées informatique IN2P3
11
Twisted : modèle asynchrone
def tache() :
deferred = etape_1()
deferred.addCallback( etape_2 )
deferred.addCallback( etape_3 )
return deferred
Journées informatique IN2P3
12
Twisted : modèle asynchrone
@defer.inlineCallbacks
def tache() :
yield etape_1 ()
yield etape_2 ()
yield etape_3 ()
Journées informatique IN2P3
13
Twisted : Perspective Broker (PB)
●
●
●
Appel de méthode sur des objets distants
Les méthodes accessibles par l'extérieur
doivent juste avoir 'remote_' comme préfixe
Les objets peuvent être transférés sur le réseau
–
Par référence (Referenceable)
–
Par copie (Copyable)
Journées informatique IN2P3
14
Twisted : Perspective Broker (PB)
Client
Referenceable
Serveur
Root
connect()
Objet : root
root.callRemote('nvx', client)
remote_nvx(client)
client.callRemote('msg', 'hello_world')
remote_msg('hello world')
Journées informatique IN2P3
15
Partie graphique côté client : GTK
●
Design des interfaces avec GLADE stockées
dans un fichier XML
ui = gtk.glade.XML('mon_fichier.glade')
●
Association automatique entre les callbacks
déclarés dans l'interface, et ceux définis dans le
contrôleur codé en Python
ui.signal_autoconnect( controleur )
●
Intégration de Twisted et GTK dans une même
boucle d' événements
Journées informatique IN2P3
16
WEB en python ?
(html, javascript) => (glade, python)
Client
Referenceable
Serveur
Root
root.callRemote('nvx', client)
remote_init_gui(
glade_xml,
python_code)
remote_show()
client.callRemote('init_gui', glade_xml, python_code)
Objet : gui
gui.callRemote('show')
Journées informatique IN2P3
17
Merci
Questions ?
Journées informatique IN2P3
18
Téléchargement