Advertisement
Guest User

Untitled

a guest
Nov 19th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.28 KB | None | 0 0
  1. 5.1 Automatisches Abmelden
  2.  
  3. Bei einem zenralen System, dass mehreren Nutzern zugänglich ist, ist es wünschenswert wenn ein Nutzer automatisch abgemeldet wird sobald er eine bestimmte Zeit untätig ist. Dies beugt Missbrauch vor. Hierzu wurde die Klasse Timeout geschrieben.
  4.  
  5. Timeout ermöglicht es einen Thread zu öffnen, welcher im Hintergrund mit einer bestimmten Abtastrate prüft ob die eingestellte Zeit bereits verstrichen ist. Da es mit dieser Funktionalität an sich nur ein Timer wäre, implementiert die Klasse weiterhin die Methode reset um den internen Timer immer dann zurückzusetzen, wenn ein bestimmtes Event aufgetreten ist. Jede Timeout-Instanz erhält außerdem ein aufrufbares Objekt und eine Liste mit positionellen Argumenten. Beim timeout wird diese Methode mit den übergebenen Argumenten ausgeführt und das Attribut timed_out auf True gesetzt.
  6.  
  7. Da die Klasse Timeout auf paralleler Programmierung basiert sind hier einige Punkte zu beachten. So wird auf timer sowohl von außerhalb, über reset, wie auch von innerhalb zugegriffen. Die Punkte an denen diese Zugriffe stattfinden bezeichnet man als Critical Sections, hier kann es zu sog. Race Conditions kommen[#Python3]. Dies ist der Fall wenn ein Thread gerade auf die Variable zugreift(z.B. liest) und dann der andere Thread die Kontrolle erhält und die Variable überschreibt und führt dazu dass der lesende Thread einen falschen Wert erhält. Um dieses Problem vorzubeugen existiert die Klasse Lock des Moduls threading. Mithilfe dieser lassen sich Stellen, die nicht Parallel verarbeitet werden dürfen, abriegeln. Dabei nimmt sich der Thread, welcher zuerst seine Critical Section erreicht den lock, welcher als Kontextmanager fungiert(intern werden die Methoden lock.acquire und lock.release aufgerufen) und führt den Code im with-Block aus. Der andere Thread kann hierbei weiterlaufen bis er seine Critical Section erreicht, erst dann wird er blockiert bis er selbst den lock acquire'n kann.
  8.  
  9. Zur Parallelisierung wurde ein Thread einem Prozess gegenüber bevorzugt da der Overhead hier kleiner ist, es ist also weniger kostspielig einen neuen Thread zu öffnen. Außerdem ist der Datenaustausch zwischen Threads immens einfacher verglichen mit Prozessen, in unserem Fall können wir einfach ein Attribut der Klasse dafür benutzen.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement