Programowanie w Sieci Internet Python: Wątki

Transkrypt

Programowanie w Sieci Internet Python: Wątki
Programowanie w Sieci Internet
Python: Wątki
Kraków, 12 grudnia 2014 r.
mgr Piotr Rytko
Wydział Matematyki i Informatyki
Wątki – akt pierwszy, kilka przydatnych funkcji
Lib/threading.py – modół pozwalający na używanie wątków
● threading.active_count() / threading.activeCount() - zwraca liczbę
aktywnych wątków.
● threading.current_thread() / threading.currentThread() - zwraca
obecny wątek.
● threading.enumerate() - zwraca listę żywych wątków.
● threading.Event() - zwraca objekt eventu. Posiada on flagę, którą
można ustrawić na true za pomocą set(), lub false za pomocą
clear(). Metoda wait() blokuje dopuki flaga jest ustawiona na true.
● Threading.Lock() - funkcja zapewniająca locka, dostep do do
watku bedzie zablokowany dopuli lock nie zostanie zwolniony.
● threading.Semaphore([val]) – semafor, zwraca ile razy zostało
wywołane release() minus liczbę wywołań acquire() plus wartość
poczatkową [val] (domyślnie val = 1).
● threading.settrace(func) – ustawia funkcję wołaną przed start().
Akt drugi, klasy powiązane z wątkami
●
●
●
●
class threading.Thread – reprezentuje kontrolę wontku, może
być rozszezana w pewnym zakresie.
class threading.Timer – wątek który jest uruchamiany po
wyznaczonym czasie.
class threading.local – klasa reprezentująca lokalny blok
danych wątku. Thread-local to dane przypisane do konkretnego
wątku. Aby wykorzystać lokalne dane, stwóż objekt i umieść w
nim swoje atrybuty. Dane dostępne z interfejsu będą się różnić
w zależności od wątku.
exception thrading.ThreadError – wyjątek rzucany przy różnych
zdarzeniach zwiazanych z wątkami.
Akt 3, co można zrobić w wątku
run() to funkcja która wykonuje się podczas aktywności wątku.
Pisząc swój wątek nadpisujemy ją i nadajemy jej jakiś sens oraz
pracę do wykonania. Jest to jedyna funkcja którą powinniśmy
nadpisywać rozrszeżająć klasę Thread.
start() tej funkcji używamy do uruchamienia wątku, a ona
rozpoczyna pracę poprzez uruchomienie funkcji run() dając
kontrolę nad wątkiem. Kiedy wątek wystartuje, jest uznawany
za żywy, aż do momentu gdy metoda run() zakończy swoje
dzialanie (czy to w sposób naturalny, czy poprzez rzucenie
nieobsłuzonego wyjątku.
jojn([timeout]) wiąże wątki, dzięki czemu wątek wołany jest
blokowany aż do momentu zakończenia działania wątku
wołającego. Jeśli podany jest argument timeout, to wątek jest
odblokowany po zakończeniu wątku wołającego, lub czasie
timeout w sekundach.
Akt 3 ciąg dalszy
name – to string identyfikujący wątek. Wiele wątków może mieć
tą samą nazwę. Początkowa nazwa jest nadawana przez
konstruktor.
getName() i setName() to api do zarzadzania nazwą wątków.
Ident – identyfikator wątku. Jest to liczba całkowita, niezerowa
nadawana w momencie wystartowania wątku (gdy wątek jest
powołany do życia. Przed ożyciem wątku, ma wartość None.
Ident jest dostępny nawet po zakonczeniu życia wątku.
is_alive() / isAlive() - mówi czy wątek ma status alive.
daemon / isDaemon(), setDaemon() wątek typu daemon nie
zatrzyma zakończenia programu Pythona. Domyślna wartość to
false. Aby ustawić ją na true należy zrobić to przed
uruchomienim funkcji start(), w przeciwnym wypadku run() rzuci
wyjątkiem RuntimeError.
Akt 4, użycie
import threading
def worker(num):
"""thread worker function"""
print 'Worker: %s' % num
return
threads = []
for i in range(5):
t = threading.Thread(target=worker, args=(i,))
threads.append(t)
t.start()
class myThread (threading.Thread):
def __init__(self, threadID, name, counter):
threading.Thread.__init__(self)
self.threadID = threadID
self.name = name
self.counter = counter
def run(self):
print "Starting " + self.name
print_time(self.name, self.counter, 5)
print "Exiting " + self.name
def print_time(threadName, delay, counter):
if exit_condition:
thread.exit()
time.sleep(delay)
print "%s: %s" % (threadName, time.ctime(time.time()))
counter -= 1
# Create new threads
thread1 = myThread(1, "Thread-1", 1)
thread2 = myThread(2, "Thread-2", 2)
# Start new Threads
thread1.start()
thread2.start()
print "Exiting Main Thread"
Dziękuję za uwagę!

Podobne dokumenty