Kurs języka Python. Wątki



Podobne dokumenty
Zaawansowany kurs języka Python

Kurs rozszerzony języka Python

Obliczenia równoległe i rozproszone w JAVIE. Michał Kozłowski 30 listopada 2003

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

Programowanie w Sieci Internet. Python: Wątki. Kraków, 12 grudnia 2014 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

Kurs programowania. Wykład 8. Wojciech Macyna

Programowanie w Ruby

Wątki i komunikacja między nimi w języku Python

Stworzenie klasy nie jest równoznaczne z wykorzystaniem wielowątkowości. Uzyskuje się ją dopiero poprzez inicjalizację wątku.

Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 1

Kurs programowania. Wykład 8. Wojciech Macyna. 10 maj 2017

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego

Język Java wątki (streszczenie)

Wątki w Javie. Piotr Tokarski

Plan. krótkie opisy modułów. 1 Uwagi na temat wydajności CPython a. 2 Podstawowe techniki poprawiające wydajność obliczeniową

Współbieżność w środowisku Java

Programowanie równoległe i rozproszone. Monitory i zmienne warunku. Krzysztof Banaś Programowanie równoległe i rozproszone 1

Bezbolesne Programowanie Współbieżne

Wykład 5. Synchronizacja (część II) Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB

Zaawansowany kurs języka Python

Kurs języka Python. Wykład 11. Marcin Młotkowski. 4 stycznia Kontrola poprawności podczas biegu programu. 2 Testowanie oprogramowania

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Programowanie równoległe i rozproszone. W1. Wielowątkowość. Krzysztof Banaś Programowanie równoległe i rozproszone 1

Język Java wątki (streszczenie)

Mechanizmy pracy równoległej. Jarosław Kuchta

Forum Client - Spring in Swing

Języki i Techniki Programowania II. Wykład 7. Współbieżność 1

1 Wątki 1. 2 Tworzenie wątków 1. 3 Synchronizacja 3. 4 Dodatki 3. 5 Algorytmy sortowania 4

Przetwarzanie wielowątkowe przetwarzanie współbieżne. Krzysztof Banaś Obliczenia równoległe 1

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Kurs języka Python Wykład 8. Przetwarzanie tekstu Wyrażenia regularne Biblioteka urllib Parsowanie html'a XML

Platformy Programistyczne Zagadnienia sieciowe i wątki

Przykłady interfejsu TCP i UDP w Javie

U M L. System operacyjny Linux zagnieżdżony w zewnętrznym systemie operacyjnym (Linux)

Java - wprowadzenie. Programowanie Obiektowe Mateusz Cicheński


Spis treści. Dekoratory. 1 Dekoratory 1.1 Zadanie Zadanie Zadanie Zadanie 4

Zdalne wywołanie metod - koncepcja. Oprogramowanie systemów równoległych i rozproszonych Wykład 7. Rodzaje obiektów. Odniesienie do obiektu

Oprogramowanie systemów równoległych i rozproszonych Wykład 7

Interfejsy w Java. Przetwarzanie równoległe. Wątki.

Programowanie wielowątkowe. Tomasz Borzyszkowski

Programowanie równoległe i rozproszone. Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz

[ Programowe tunelowanie połączeń TCP. ]

Zaawansowany kurs języka Python

Systemy operacyjne. Zajęcia 11. Monitory

Semafor nie jest mechanizmem strukturalnym. Aplikacje pisane z użyciem semaforów są podatne na błędy. Np. brak operacji sem_post blokuje aplikację.

Wywoływanie metod zdalnych

Aplikacje w Javie- wykład 11 Wątki-podstawy

Zaawansowany kurs języka Python

Współbieżność w Javie

Współbieżność w Javie

Task Parallel Library

Python wstęp. Michał Bereta

Programowanie obiektowe

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

Projekt z przedmiotu Specjalizowane języki programowania Temat: Zastosowanie programowania obiektowego w środowisku LabView

Semafor nie jest mechanizmem strukturalnym. Aplikacje pisane z użyciem semaforów są podatne na błędy. Np. brak operacji sem_post blokuje aplikację.

1 Atrybuty i metody klasowe

PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO

WIELOWĄTKOWOŚĆ. Waldemar Korłub. Platformy Technologiczne KASK ETI Politechnika Gdańska

Dokumentacja aplikacji Szachy online

Singleton. Cel: Przykład: Zastosowanie: Zapewnienie, że klasa ma tylko jedną instancję i dostarczenie globalnego dostępu do niej.

Wstęp do programowania 2

Kurs rozszerzony języka Python

Podstawy współbieżności

Zaawansowane programowanie w C++ (PCP)

Programowanie obiektowe - 1.

Podstawy programowania obiektowego

Wykresy i interfejsy użytkownika

Pakiety i interfejsy. Tomasz Borzyszkowski

Wprowadzenie do języka Java

System operacyjny MACH

Kurs rozszerzony języka Python

Zaawansowany kurs języka Python

Python wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA

Język Java część 2 (przykładowa aplikacja)

Monitory. Jarosław Kuchta

Programowanie współbieżne Wykład 2. Iwona Kochańska

Od uczestników szkolenia wymagana jest umiejętność programowania w języku C oraz podstawowa znajomość obsługi systemu Linux.

Wielowątkowość. Programowanie w środowisku rozproszonym. Wykład 1.

Programowanie w Ruby

76.Struktura oprogramowania rozproszonego.

Programowanie w Ruby

Technologie cyfrowe semestr letni 2018/2019

Tryby komunikacji między procesami w standardzie Message Passing Interface. Piotr Stasiak Krzysztof Materla

Java. Programowanie Obiektowe Mateusz Cicheński

Programowanie współbieżne Wykład 9 Synchronizacja dostępu do współdzielonych zasobów. Iwona Kochańska

WSNHiD, Programowanie 2 Lab. 2 Język Java struktura programu, dziedziczenie, abstrakcja, polimorfizm, interfejsy

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

Programowanie współbieżne Wykład 5. Rafał Skinderowicz

Programowanie obiektowe

Swing Application Framework czyli tam i z powrotem. Copyright Piotr Kochański & Erudis,

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Multimedia JAVA. Historia

Wykład 8: klasy cz. 4

Aplikacje internetowe i rozproszone - laboratorium

Systemy operacyjne III

Obliczenia równoległe i rozproszone. Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz

Język Java część 2 (przykładowa aplikacja)

Transkrypt:

Kurs języka Python Wątki

Wątek Wątek (ang. thread) to jednostka wykonawcza w obrębie jednego procesu, będąca kolejnym ciągiem instrukcji wykonywanym w obrębie tych samych danych (w tej samej przestrzeni adresowej). Wątki tego samego procesu korzystają ze wspólnego kodu i danych, mają jednak oddzielne stosy. Źródło: www.wikipedia.pl

Do czego używa się wątków Serwery (np. WWW), które obsługujące wielu klientów Obsługa systemów GUI; zlecenie wykonania zadania nie powoduje 'zamrożenia' działania interfejsu

Wątki, przykład MASZYNA WIRTUALNA i = i + 1 print i i = i + 1 print i i = i + 1 i = i - 1 print i i = i - 1 print i i = i - 1 print i print i

Przykładowy przebieg MASZYNA WIRTUALNA i = i + 1 print i i = i + 1 print i i = i + 1 i = i - 1 print i i = i - 1 print i i = i - 1 print i print i

Przykładowy przebieg MASZYNA WIRTUALNA i = i + 1 print i i = i + 1 print i i = i + 1 i = i - 1 print i i = i - 1 print i i = i - 1 print i print i

Moduł threading class Thread: def start(self): '''Wywołuje metodę run''' def run(self): pass

Zadanie Zasymulowanie za pomocą wątków biegaczy w maratonie.

Implementacja biegaczy import threading total_distance = 0 class runner(threading.thread): def init (self, nr_startowy): self.numer = nr_startowy threading.thread. init (self)

Implementacja biegu def run(self): global total_distance dystans = 42195 while dystans > 0: dystans = dystans - 1 total_distance = total_distance + 1 if dystans % 10000 == 0: print 'Zawodnik nr %i' % self.numer print 'Zawodnik %i na mecie' % self.numer

Rozpoczęcie wyścigu r1 = runner(1) r2 = runner(2) r1.start() r2.start() r1.join() r2.join() print 'koniec wyścigu, dystans', total_distance

.join() 'Główny' program to też wątek, to oznacza że po wywołaniu r1.start() są DWA wątki w.join() powoduje czekanie na zakończenie wątku w

Dostęp do wspólnej zmiennej total_distance = 0 class runner(threading.thread):... total_distance = total_distance + 1 print total_distance

Zagadka Jaka jest wartość zmiennej total_distance?

Operacje 'atomowe'? i = i + 1 Wątek 1: LOADFAST 0 LOAD_CONST 1 BINARY_ADD STORE_FAST 0 Wątek 2: LOADFAST 0 LOAD_CONST 1 BINARY_ADD STORE_FAST 0

Blokady Lock lock = Lock() def run(self): global lock... lock.acquire() total_distance = total_distance + 1 lock.release()

Lock Szybko działa Możliwość samozakleszczenia: lock.acquire() lock.acquire()

Blokady wielowchodliwe (reentrant) lock = threading.rlock() lock.acquire()... lock.acquire() i = i + 1 lock.release()... lock.release()

RLock Aby zwolnienić blokadę trzeba zwolnić ją tyle razy ile została założona Program jest wyraźnie wolniejszy od programu z blokadami typu Lock

Modyfikacja zadania sztafeta Każdy biegacz ma zmienną 'pałeczka', która ma wartość 0 lub 1 Jeśli pałeczka == 0, to biegacz musi czekać w miejscu, aż mu ją ktoś przekaże, tj. ustawi paleczka == 1

Pierwsze podejście Posiadacz = 1 # zmienna globalna # aktywne czekanie, wątek nr. n while posiadacz!= n: pass

Synchronizacja wątków class Biegacz(threading.Thread): def init (self, nr_startowy, blokada, nastepny=none, paleczka=0): self.numer = nr_startowy self.blokada = blokada self.paleczka = paleczka self.nastepny = nastepny threading.thread. init (self)

def run(self): dystans = 40000 self.blokada.acquire() while self.paleczka == 0: self.blokada.wait() print "%i wystartowal" % self.numer while dystans > 0: dystans = dystans - 1

if self.nastepny: self.paleczka = 0 self.nastepny.paleczka = 1 self.blokada.notifyall() self.blokada.release() print "zawodnik %i dobiegl" % self.numer

lock = threading.condition() r4 = Biegacz(4, lock) r3 = Biegacz(3, lock, r4) r2 = Biegacz(2, lock, r3) r1 = Biegacz(1, lock, r2, 1) for r in [r4, r3, r2, r1]: r.start()

Mechanizmy wake() - zwalnia uzyskaną blokadę i 'zasypia' dopóki nie zostanie obudzony. Po obudzeniu otrzymuje blokadę notify() - 'budzi' inny wątek uśpiony przy tej blokadzie metodą wake notifyall() - budzi wszystkie wątki, które przysnęły przy tej blokadzie

Komunikacja między wątkami skrzynka = '' # nadawca lock.acquire() while len(skrzynka) > 0: lock.wait() skrzynka = 'komunikat' lock.notify() lock.release()

Odbiorca lock.acquire() while len(skrzynka) == 0: skrzynka.wait() print skrzynka skrzynka = '' lock.notify() lock.release()

Wady Nie można zbuforować więcej niż jeden komunikat Jeśli dwa wątki pracują z różną wydajnością, to szybszy będzie ciągle spowalniany

Dostęp do struktur danych Zwykle struktury danych nie są bezpieczne ze względu na wątki (thread-safe)

Klasa Queue Kolejka FIFO przechowująca obiekty Bezpieczna ze względu na wątki

Metody Konstruktor: Queue(rozmiar) put(item) get(item)

Zastosowanie praktyczne Testowanie wydajności serwera WWW zalewając go odwołaniami do strony

Architektura Scenariusze (lista kolejnych odwołań), np: [ "/", "/cms/pl/about_institute", "/"] Równoległe uruchomienie wielu tych samych scenariuszy ROZWIĄZANIE Implementacja własnej miniprzeglądarki działającej jako wewnątrz własnego wątka Implementacja klasy HttpBrowser

Implementacja class HttpBrowser(threading.Thread): def init (self, connection, host, scenariusz): def run(self):

host = "www.ii.uni.wroc.pl" scenariusz = [ "/", "/cms/pl/about_institute", "/"] agenty = [ HttpBrowser( httplib.httpconnection, host, scenariusz) for a in range(20) ] for a in agenty: a.start()

Najbliższa przyszłość Sieci (protokoły http, SOAP etc.) Jeszcze o Pythonie (m.in. refleksje) Współpraca z innymi językami (C, Java, Mono) Narzędzia developerskie (testowanie, debuggowanie, profilowanie)