Seite 1 von 1

Thread sperren

Verfasst: Dienstag 13. Dezember 2005, 14:38
von heftic
Hallo!

Ich suche nach einer einfachen möglichkeit einen Thread zu sperren.
Sowas wie Lock in Java.

Hintergrund ist:
Ich lasse einen Server immer nach einer gewissen Zeit mehrere RemotePC's scannen (welcher User sich darauf befindet oder welcher PC frei ist)
Dieser Server gibt dann bei einer Anfrage eines Clients die erste freie WorkstationIP an diesen Client zurück.
Problem dabei ist dass der ScanThread nicht ausgelöst werden darf während ein Client eine Anfrage stellt.

Ich hoffe ihr könnt mir helfen.

Verfasst: Dienstag 13. Dezember 2005, 15:02
von mr.hide
Hat doch die Klasse Threading...

http://python.org/doc/2.3.3/lib/module-threading.html

Oder?

mfg
Matthias

Verfasst: Dienstag 13. Dezember 2005, 15:04
von Gast
Ja

Hätte aber gerne mal nen kleines Beispiel.

Verfasst: Dienstag 13. Dezember 2005, 15:05
von heftic
Sorry!

irgendwie wurde ich net angemeldet :shock:

Verfasst: Dienstag 13. Dezember 2005, 15:57
von Leonidas
Ein Beispiel.. hmm, blackbird hat mal sowas fürs Wiki geschrieben. Vielleicht hilft dir das. Alternativ auch die Forensuche bemühen.

Verfasst: Mittwoch 14. Dezember 2005, 07:45
von heftic
Jo danke.

Aber über die Forensuche habe ich leider nichts entsprechendes gefunden.

Verfasst: Mittwoch 14. Dezember 2005, 11:20
von mr.hide
Hab das jetzt auch mal probiert aber irgendwie steh ich da auch auf dem Schlauch.

Ich habe folgendes:

Code: Alles auswählen

import threading
import time


class OwnThread(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        print "Thread gestartet"
        while (True):
            print "ich laufe noch"
            time.sleep(0.5)
    

t = OwnThread()
t.start()

lock = t.Lock()

lock.acquire()

Trotzdem sieht meine Ausgabe noch so aus:

Code: Alles auswählen

ich laufe noch
ich laufe noch
ich laufe noch
ich laufe noch

usw.

An was kann das liegen ??


Grüße
Matthias

Verfasst: Mittwoch 14. Dezember 2005, 12:04
von heftic
:?:

Mit einem einzigen Thread brauchst du doch kein Lock oder?

Außerdem: Gehört das acquire nicht vor die Ausgabe?

Verfasst: Mittwoch 14. Dezember 2005, 12:14
von mr.hide
Ist ja nur zum testen.


aber es sind doch 2 , das Hauptprogramm und der Thread sind ja 2...

Ich hab das t.start() mal ans Ende gesetzt bringt aber auch nichts...


Komisch

Verfasst: Mittwoch 14. Dezember 2005, 14:55
von Leonidas
Ich hätte ein Beispiel:

Code: Alles auswählen

#!/usr/bin/python
# -*- encoding: latin-1 -*-

import threading, time

class OwnThread(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        self.lock = threading.Lock()
    
    def run(self):
        self.lock.acquire()
        print "Thread gestartet"
        for x in range(10):
            print "ich laufe noch"
            time.sleep(0.5)
        self.lock.release()

t = OwnThread()
t.start()
Naja, das Lock ist im beispiel zwar vollkommen unnötig, aber es funktioniert zumindest.

Verfasst: Mittwoch 14. Dezember 2005, 15:06
von heftic
Danke nochmal.

Habs mitlerweile auch soweit :D

Verfasst: Mittwoch 14. Dezember 2005, 15:09
von mr.hide
Bei mir ist auch der Groschen gefallen :oops: