while schleife wartet nicht auf class

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
bcit6k
User
Beiträge: 77
Registriert: Mittwoch 23. Juli 2008, 08:50

while schleife wartet nicht auf class

Beitragvon bcit6k » Montag 30. März 2009, 10:38

Hallo,

ich habe folgende aufgabenstellung zu lösen.

ich habe eine while schleife die nacheinander bestimmte urls mit urllib aufruft. bis die url geladen ist ( bzw antwortet) vergehen teilweise 12 minuten. ich dachte mir nun ich bau mir eine klasse die die url aufruft und eine zweite die chekct wie lange die url schon aufgerufen wird.
wird die url länger als 15 aufgerufen soll das skript das abbrechen.

ich habe das bis jetzt zum probieren mal so gelöst

Code: Alles auswählen

class openurl(threading.Thread):
   def __init__ (self):
      threading.Thread.__init__ (self)
      # # seconds for refreshing cpuload
      #write_to_log("# OPENURL Threat Start",0)
      class_check_openurl = check_openurl()
      class_check_openurl.start()
      self.loop = True
      
   def run(self):
      while self.loop:
         sleep(15)
         print "test"
         #url = 'someurl
         #page = urllib.urlopen(url)
         #pagedata = page.read()
         #return pagedata
         self.loop = False
      
   def __del__ (self):
      print "thread ended"



Code: Alles auswählen

class check_openurl(threading.Thread):
   def __init__ (self):
      threading.Thread.__init__ (self)
      self.loop = True
      #seconds for refreshing cpuload
      self.refreshtime=1
      self.timeout = 15 # How long should the script wait
      self.countstart = 0
      print "CHECKSCRIPT START"
   
   def run(self):
      try:
         while self.loop:
            if(self.countstart > self.timeout):
               self.loop = False
            
            print self.countstart
            
            self.countstart = self.countstart + 1
            sleep(self.refreshtime)
      except:
         print "something went wrong"




Code: Alles auswählen

while not cursor.EOF:
   print cursor.fields[0]
   # # START THE CHECK SCRIPT
   
   # # OPEN THE URL FOR CACHING
   class_openurl =  openurl()
   class_openurl.start() #cursor.fields[0]

   
   cursor.MoveNext()


leider ist es so das die while schleife nie auf die klasse wartet, und ich weis nicht warum. hat jemand einen tipp für mich?

danke für die hilfe!
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Beitragvon rayo » Montag 30. März 2009, 11:44

Code: Alles auswählen

import socket
import urllib2

# timeout in seconds
timeout = 15
socket.setdefaulttimeout(timeout)


# this call to urllib2.urlopen now uses the default timeout
# we have set in the socket module
req = urllib2.Request('http://www.voidspace.org.uk')
response = urllib2.urlopen(req)


Dieser Timeout reicht dir nicht?

Gruss
Benutzeravatar
kbr
User
Beiträge: 806
Registriert: Mittwoch 15. Oktober 2008, 09:27
Wohnort: Düsseldorf

Beitragvon kbr » Montag 30. März 2009, 11:45

Wenn ich das richtig sehe, startest Du in der while-Schleife stets einen neuen Thread, der dann wartet. Daher wartet die while-Schleife selbst nicht - das ist ja gerade der Sinn von Threads.
bcit6k
User
Beiträge: 77
Registriert: Mittwoch 23. Juli 2008, 08:50

Beitragvon bcit6k » Montag 30. März 2009, 13:52

ok, ich verstehe, ich hab mir inzwischen auch schon überlegt das ganze mit Queue zu machen. ist vieleicht der bessere weg

danke für den tipp!
nuss
User
Beiträge: 53
Registriert: Donnerstag 28. August 2008, 11:36

Beitragvon nuss » Montag 30. März 2009, 16:36

erstell doch einfach jedesmal, wenn du einen Thread öffnest einen timestamp, denn du an die klasse anhängst, dann kannst du einfach in regelmäßigen abständen für jeden thread die differenz zu jetzt ausrechnen.

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot], Nebeig