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

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

Zaawansowany kurs języka Python

Kurs języka Python. Wątki

Programowanie obiektowe

Kurs rozszerzony języka Python

Bezbolesne Programowanie Współbieżne

Przegląd języka Python. Łukasz Anwajler

Kurs rozszerzony języka Python

Programowanie w Ruby

Programowanie obiektowe

Podstawy programowania w Pythonie

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

Zaawansowany kurs języka Python

Komunikacja Człowiek-Komputer

Zaawansowany kurs języka Python

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

Podstawy. Jan Koprowski Politechnika Gdańska, FTiMS Informatyka Stosowana

Wykresy i interfejsy użytkownika

Podstawy Programowania ELEMENTY PROGRAMU i TYPY DANYCH

Dzi kuj za uwag! Spotkania z Pythonem. Cz ± 1 - podstawy - rozwi zania zada« Michaª Alichniewicz. Gda«sk Studenckie Koªo Automatyków SKALP

Zaawansowany kurs języka Python

Technologie Informacyjne

Python. Skąd taka nazwa? Kurs systemu UNIX 1

Podstawy programowania: Python. Wprowadzenie. Jolanta Bachan

[ Programowe tunelowanie połączeń TCP. ]

Python wstęp do programowania dla użytkowników WCSS

Programowanie w Ruby

Wstęp do programowania

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

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

rozdział 4: ZMIENNE I INSTRUKCJE

Programowanie w Sieci Internet. Python: Operacje z plikami oraz obsługa wyjątków

Podstawy programowania w Pythonie

Kurs programowania. Wykład 8. Wojciech Macyna

Programowanie robota mobilnego E-puck w języku Python

Wstęp do programowania

Wstęp do ruby dla programistów javy

Python i programowanie funkcyjne. Python i programowanie funkcyjne czyli nie tylko obiektowość rządzi. OSEC Funkcyjnie w języku Python 1 z 40

Informatyka 2015/16 wykład 9. Pliki Sterowanie przebiegiem programu cz. 2. Dr inż. Witold Nocoń (p. 230)

Liczby losowe i pętla while w języku Python

Programowanie w Ruby

Redis, skrypty w języku Lua

Język ludzki kod maszynowy

Metaprogramowanie w Ruby

Języki i metody programowania

Programowanie współbieżne Zadanie 5 - Podstawowe problemy programowania współbieżnego

Java. Programowanie Obiektowe Mateusz Cicheński

Obliczenia Symboliczne I. Python - Składnia Typizacja

Programowanie obiektowe

Przedmiotowy Konkurs Informatyczny LOGIA powołany przez Mazowieckiego Kuratora Oświaty

Kontrola przebiegu programu

Kurs języka Python. Wykład 14. Marcin Młotkowski. 25 stycznia Python i Apache Pythonowe platformy aplikacyjne. Dystrybucja aplikacji w U*IX

Generatory. Michał R. Przybyłek

Programowanie wielowątkowe. Jarosław Kuchta

PROGRAMOWANIE W PYTHONIE OD PIERWSZYCH KROKÓW

Zaawansowany kurs języka Python

Architektury systemów rozproszonych LABORATORIUM. Ćwiczenie 1

Przetwarzanie równoległe i współbieżne

Aplikacja wielowątkowa prosty komunikator

Dokowanie molekularne. Andrzej Bąk


Pisząc kod w Pythonie na pewno już nie raz coś poszło nie tak i Shell wypisał komunikat o błędzie podobny do poniższego:

Kurs języka Python. Wykład 5. Marcin Młotkowski. 9 listopada Rodzaje parametrów funkcji. 2 Biblioteka Tk. 3 Układanie kontrolek w oknie

Multimedia JAVA. Historia

Wprowadzenie do języka Ruby

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

Zaawansowany kurs języka Python

Technologie cyfrowe semestr letni 2018/2019

Wstęp do programowania

Zaawansowane programowanie w C++ (PCP)

Wprowadzenie do języka Java

Sphinx - system dokumentacji dla Pythona

PRZETWARZANIE ROZPROSZONE ZADAN` Mariusz Gil 4Developers 2012, Poznań

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

Wstęp do informatyki. stęp do informatyki Polecenia (cz.2)

Systemy operacyjne. Zajęcia 11. Monitory

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

Microsoft IT Academy kurs programowania

Programowanie obiektowe

Tango-RedPitaya. Tango device server for RedPitaya multi-instrument board. Grzegorz Kowalski 31 sierpnia 2015

Metody numeryczne. Artur Wymysłowski, prof. PWr. Wrocław

Wstęp do programowania

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Języki i metody programowania

SZCZEGÓŁOWY SPIS TREŚCI

Algorytmy i struktury danych

EPI: Interfejs Graficzny 2011/2012 Laboratorium nr 2 Programowanie obiektowe

Język programowania zbiór reguł określających, które ciągi symboli tworzą program komputerowy oraz jakie obliczenia opisuje ten program.

Wstęp do programowania

Kurs rozszerzony języka Python

Ćwiczenia z przetwarzania tablic 2D

RESTful Android. Na co zwrócić uwagę przy tworzeniu aplikacji klienckich REST na Androidzie

Wprowadzenie do Python

4. Funkcje. Przykłady

Aplikacje WWW. Krzysztof Ciebiera. 3 kwietnia 2014

Koło Studentów Informatyki Uniwersytetu Wrocławskiego

Programowanie i projektowanie obiektowe

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

Transkrypt:

Wątki i komunikacja między nimi w języku Python Czyli kolejny poziom abstrakcji. Michał Mazurek mazurek.michal@gmail.com http://www.ifresearch.pl January 14, 2008

Python? A co to? Python Interpretowany, interaktywny język programowania stworzony przez Guido van Rossuma w 1990. Python posiada w pełni dynamiczny system typów i automatyczne zarządzanie pamięcią, jest zatem podobny do takich języków, jak Tcl, Perl, Scheme czy Ruby. a Więcej informacji w Google. :) aźródło http://pl.wikipedia.org/wiki/wątek_(informatyka)

Spis treści. 1 2

Jeden wątek, a kilka wątków. W programie jednowątkowym liczymy w tym samym czasie jedną rzecz, w programie wielowątkowym kilka rzeczy możemy policzyć w tym samym momencie. 1 1 Tak naprawde to nie jest nigdy ten sam moment, ale różnice czasowe są takie małe, że w sumie nie ma różnicy, dla nas. Dla procesora to dużo czasu i pewnie dla czegoś jeszcze też, w sumie dla całego wszechświata nasza cywilizacja to jest moment...

Zastosowanie Przecież nie będziemy tylko liczyć! Serwery socketowe Różnego rodzaju playery Systemy operacyjne Wszystko dookoła 2 2 Tak naprawdę to wszystko jest wielowątkowe, niby pisząc to nawet nie robie tylko tego, używam jabbera, słucham czegoś. Zawsze wszystko działa w wątkach

Moduł threading threading High-levelowy interfejs do obsługi wątków, zbudowany na module thread. a a Nie będe tu przytaczał funkcji itd. polecam dokumentacje python a

threading.thread Prosta obsługa wątków. 1 from threading import Thread 2 class MyThread(Thread): 3 4 def init (self, times): 5 try: 6 self.times = int(times) 7 except ValueError: 8 self.times = 0 9 self.alive = True 10 super(mythread, self). init () 11 12 def run(self): 13 14 for x in range(0, self.times): 15 print x 16 17

Ale co z wątkiem który ma działać zawsze. Implementacja metody stop() 14 def run(self): 15 import time 16 while self.alive: 17 print "smth" 18 time.sleep(1) 19 20 def stop(self): 21 self.alive = False

Ok więc aplikacja się wiesza... To zróbmy coś z tym? Moduł signal 1 import signal 2 import time 3 def signal_handler(signum, frame): 4 print "Caught signal! %s" % str(signum) 5 6 signal.signal(signal.sigint, signal_handler) 7 signal.signal(signal.sigterm, signal_handler) 8 9 while True: 10 print "test" 11 time.sleep(1)

Przykład threadtest1.py 1 import sys import time import signal from threading import Thread class MyThread(Thread): def init (self, times): try: self.times = int(times) except ValueError: self.times = 0 self.alive = True #self.file = open("thread1.out", "w") super(mythread, self). init () def run(self): while self.alive: self.times -= 1 print str(self), self.times time.sleep(1) def stop(self): self.alive = False threads = []

Przykład threadtest1.py 2 def signal_handler(signum, frame): print "Caught signal! %s" % str(signum) for th in threads: print "Closing %s" % str(th) th.stop() sys.exit(0) # we re catching the sigterm signal.signal(signal.sigint, signal_handler) signal.signal(signal.sigterm, signal_handler) th = MyThread(10) th.start() threads.append(th) for x in range(0, 10): print x time.sleep(1) print "Now let s stop..." th.stop()

Motyw message board u.

Co to message board? Message Board Wyobraź sobie tablicę z informacjami, na której pojawiają sie informacje, nie znani są nadawcy i odbiorcy, ważna jest tylko informacja

Przyklad message board u - 1.

Przyklad message board u - 2.

Przyklad message board u - 3.

Implementacja Moduł A 1 import modulec 2 3 modulec.flag = True Moduł B 1 import modulec 2 3 if modulec.flag: 4 print "Hello World!" Moduł C 1 flag = False

Implementacja z threadami threadmodulec.py from threading import Event event = Event() flag = "Value" die = False

Implementacja z threadami threadmodulea.py from threading import Thread import time import threadmodulec class ModuleA(Thread): def init (self): self.alive = True super(modulea, self). init () def run(self): for x in range(0, 10): threadmodulec.event.set() threadmodulec.flag = x if threadmodulec.die or not self.alive: print "Killing ModuleA" break time.sleep(2) def stop(self): self.alive = False th = ModuleA() start = th.start

Implementacja z threadami threadmoduleb.py import time from threading import Thread import threadmodulec class ModuleB(Thread): def init (self): self.alive = True super(moduleb, self). init () def run(self): while True: threadmodulec.event.wait(5) if threadmodulec.event.isset(): print threadmodulec.flag threadmodulec.event.clear() else: print "I ve waited 5 secs..." if threadmodulec.die or not self.alive: print "Killing ModuleB" break def stop(self): self.alive = False th = ModuleB() start = th.start

Implementacja z threadami threadmodulemain.py import signal import time import sys from threadmodulea import start as modulea_start from threadmoduleb import start as moduleb_start import threadmodulec def signal_handler(signum, frame): print "Caught signal! %s" % str(signum) #setting die for true threadmodulec.die = True #sys.exit(0) # we re catching the sigterm signal.signal(signal.sigint, signal_handler) signal.signal(signal.sigterm, signal_handler) #lets start the threads modulea_start() moduleb_start() while not threadmodulec.die: time.sleep(1) print "Main iterated..." print "Exiting main thread"

Linki Źródła do pobrania http: //www.michalmazurek.pl/zimowisko/zimowisko.tar.gz Python http://www.python.org Dokumentacja modułu threading http://docs.python.org/lib/module-threading.html