• Aucun résultat trouvé

Création de processus

N/A
N/A
Protected

Academic year: 2022

Partager "Création de processus"

Copied!
26
0
0

Texte intégral

(1)

Création de processus

(2)

Forking

• Cloner des processus

• Fork permet de créer un processus identique au parent

• Le thread en execution est dupliqué exactement au point ou on appel le fork()

Retourne 0 chez l’enfant

Retourne le PID de l’enfant chez le parent

• Le PID du parent et de l’enfant sont différents

(3)

Vim fork-demo.py

#!/usr/bin/env python

Import os

Def child_process () :

Print ‘’ i am a child process and my PID is %d’’%os.getpid()

Print ‘’the child is exiting’’

Def parent_process()

Print ‘’ i am a parent process with PID %d’’%os.getpid()

Childpid = os.fork()

If childpid == 0 :

#we are inside child

Child_process()

Else :

#we are inside a parent process

Print‘’we are inside a parent process’’

Print‘’our childhas the PID : %d’’ %childpid

While true :

Pass

Parent_process()

(4)

• Chmod a+x fork-demo.py

• ./fork-demo.py

(5)

Threading and queues

(6)

Threading et files d’attentes

• Créer une queue de taches

• Thread reçoivent les taches

• Threads finalisent la tache et informent la queue

• Tous les thread quittent une fois la queue vide

(7)

• Ouvrez votre terminal

• Vim q.py

• #!/usr/bin/env python

• Import threading

• Import Queue

• Import time

• On va commencer par créer la queue des taches

• queue = Queue.Queue()

• Là on va imaginer une classe travailleur qui va récupérer les taches à partir de la queue pour les executer

(8)

• #!/usr/bin/env python

• Import threading

• Import Queue

• Import time

• class WorkerThread(threading.Thread) :

def __init__(self, queue) :

threading.Thread.__init__(self)

self.queue = queue

• Queue = Queue.Queue()

(9)

#!/usr/bin/env python

Import threading

Import Queue

Import time

class WorkerThread(threading.Thread) :

def __init__(self, queue) :

Threading.Thread.__init__(self)

Self.queue = queue

def run(self) :

print ‘’in workerThread’’

while True :

counter = self.queue.get()

print‘’Ordered to sleep for %d seconds!’’%counter

Time.sleep(counter)

print‘’Finishedsleeping for %d seconds’’%counter

Self.queue.task_done()

queue = Queue.Queue()

Maintenant il faut penser à créer le worker thread

(10)

#!/usr/bin/env python

Import threading

Import Queue

Import time

class WorkerThread(threading.Thread) :

def __init__(self, queue) :

Threading.Thread.__init__(self)

Self.queue = queue

def run(self) :

print‘’in workerThread’’

while True :

counter = self.queue.get()

print‘’Ordered to sleepfor %d seconds!’’%counter

Time.sleep(counter)

print‘’Finishedsleeping for %d seconds’’%counter

Self.queue.task_done()

Queue = Queue.Queue()

for i in range(10) :

Print‘’creating workerThread:%d’’%i

worker = WorkerThread(queue)

worker.setDaemon(True)

worker.start()

print‘’WorkerThred %d Created!’’%i

Maintenant nous avons notre worker thread nous avons notre petite boucle et nous avons créée tous nos workerthread

La grande question ou allons nous poser les taches

Notre queue a été créée (Queue = Queue.Queue() ) et elle est passée en argument à la création du worker

(11)

#!/usr/bin/env python

Import threading

Import Queue

Import time

class WorkerThread(threading.Thread) :

def __init__(self, queue) :

Threading.Thread.__init__(self)

Self.queue = queue

def run(self) :

print‘’in workerThread’’

while True :

counter = self.queue.get()

print‘’Ordered to sleepfor %d seconds!’’%counter

Time.sleep(counter)

print‘’Finishedsleeping for %d seconds’’%counter

Self.queue.task_done()

queue = Queue.Queue()

for i in range(10) :

Print‘’creating workerThread:%d’’%i

worker = WorkerThread(queue)

worker.setDaemon(True)

worker.start()

print‘’WorkerThred %d Created!’’%i

for j in range (10) :

queue.put(j)

queue.join()

Print‘’all tasksover’’

Enregistrer et quitter

(12)

• Python q.py

(13)

Solution de l’exercice directory traversal

#!/usr/bin/python

import os

import sys

pre = ''

for (path, dirs, files) in os.walk(sys.argv[1]) :

depth_from_root = len(path.split('/'))

print '-'*(depth_from_root*4 +8) + ' [' + path.split('/')[-1] + ']'

for file in files :

print '-'*(depth_from_root*4 +12) + ' ' +file

#print '-'*(depth_from_root +12) + ' Files: ' + str(files)

(14)

Solution de l’exercice directory traversal

Chmod a+x exo-dir.py ./exo-dir.py ../A/

(15)

Programmation client- serveur

Python for security

(16)

Programmation réseau

• Programmation des sockets deux types :

Socket TCP & UDP

Clients et serveurs réguliers

Raw Sockets (sockets brutes )

Sinfing et injection

(17)

Programmation client et serveur

• Serveur

Offre un service

• Client

Utilise ou consomme un service

• Utilisation du module Socket

(18)

Serveur TCP simple et client

(19)

• Ouvrez l’interpréteur python

• import socket

• tcpSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

• Là vous avez créé une TCP Socket pour écouter sur un port spécifique de la machine serveur

• Nous utilisons la méthode socket qui prend deux arguments

socket.AF_INET : adress family pour les applications internet on utilise tjr AF_INET

SOCK_STREAM : le type de socket nous utilisons SOCK_STREAM pour TCP et DATAGRAM socket pour UDP

• Là on a créé notre socket

(20)

• Ouvrez l’interpréteur python

• import socket

• tcpSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

• tcpSocket.bind((‘’0.0.0.0’’, 8000))

Les 0.0.0.0 représentent l’adresse de l’interface

8000 le numéro de port

(21)

• Ouvrez l’interpréteur python

• import socket

• tcpSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

• tcpSocket.bind((‘’0.0.0.0’’, 8000))

• tcpSocket.listen(2)

2 représentente le nombre de clients concurrents autorisés

(22)

Ouvrez l’interpréteur python

import socket

tcpSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

tcpSocket.bind((‘’0.0.0.0’’, 8000))

tcpSocket.listen(2)

(client, ( ip, port)) = tcpSocket.accept()

La méthode accept retourne le couple (client : qui identifie le client avec qui vous etablissez la connexion ce qui veut dire pour chaque nouveau client accepté une

nouvelle socket sera créée) la seconde partie consiste en @ip et n°de port distant du client

Maintenant ouvrez un autre terminal pour simuler un client

Taper ifconfig pour verifier l’@ IP du serveur

nc @ip du serveur 8000

Rien ne va s’afficher mais le client est connecté

(23)

Revenez vers le 1er terminal

Client

Vous aurez comme réponse <socket._socketobject object at 0x……>

ip

Vous aurez l’@ip du client

Port

Vous aurez le numéro de port distant

Pour envoyer des informations au client il suffit de faire

client.send(‘’bienvenue à notre TP’’)

Vous remarquerez que le message s’affiche chez le client

De la même manière si vous souhaitez recevoir des données de chez le client

data = client.recv(2048)

Sur le client taper ceci est mon premier exemple client serveur

Revenez au serveur et taper

data

(24)

• Si vous quittez l’interpreteur, il sera automatiquement mis fin à cette liaison

(25)

• À la lumière de ce que vous avez vu maintenant vous avez 10mn pour m’envoyer le programme qui permet de créer un écho server

• Un echo server est un serveur qui renvoie tout ce qu’il reçoit vers la source émettrice

• Solution

• while len(data)

data= client.recv(2048)

Print ‘’client sent :’’ ,data

Client.send(data)

• Print ‘’closing connection’’

• client.close()

• print ‘’shutting down server’’

• tcpSocket.close()

(26)

• Si le programme serveur est arrété de manière incorrecte vous remarquerez au redemarrage un message d’erreur indiquant

• Errno 98 address already in use

• C’est un problème récurrent

• Pour l’éviter il faut rajouter la ligne suivante juste apres la création de la socket

• tcpSocket.setsockopt(socket.sol_SOCKET, socket.SO_REUSEADDR, 1)

Références

Documents relatifs

Le métier du manager, qui consiste à transformer le travail de ses équipes en performance pour l'entreprise, se complique chaque jour un peu plus. Il ne suffit pas, explique

The InfoServer system can downline load the primary bootstrap program to Open VMS systems, by handling maintenance operation protocol (MOP) requests. The Open VMS system

Dans e as, l'objet ChatRoom joue le rle de lient et l'objet ChatClient joue le rle de serveur. Une onséquene de ei set qu'il vous sera néessaire de générer les stubs et les

• Matrices can be specified at different level in the graphics tree (equivalent to matrix multiplication).  CSS

 HTML 5 Tentative Encrypted Media

Le marketing est au centre du triptyque Produit - Prix - Client et permet d'as- socier les fonctionnalités du produit a un prix donné pour une cible de clients.. Il établit, à

Cette procédure décrit la configuration du logiciel des Systèmes de chimie ADVIA pour génèrer des alarmes basées sur l’absorbance de l’échantillon.. Les étapes qui ne

En cas d’échec de calibration et/ou des contrôles qualité hors des limites acceptables, nous vous demandons de contacter le Support Technique ou le Département Marketing Biochimie