Ladezeiten bei urllib messen

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.
bankkind
User
Beiträge: 106
Registriert: Freitag 14. September 2007, 23:02
Wohnort: Teltow
Kontaktdaten:

Montag 4. Mai 2009, 09:16

Leider ist das schon ein Problem. Weil für mich, der das noch nicht gemacht hat, ist das gefrickel und mir fehlt da leider eine vernünftige Anleitung.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 4. Mai 2009, 09:40

bankkind hat geschrieben:Weil für mich, der das noch nicht gemacht hat, ist das gefrickel und mir fehlt da leider eine vernünftige Anleitung.
Dann gibt es zwei Möglichkeiten: Python 2.5 nehmen oder MySQLdb-Quellen runterladen, MySQL herunterladen (und hoffen dass die Include-Dateien dabei sind) und einen Compiler herunterladen (Visual C++ Express sollte reichen, oder MinGW. Je nach Software ist der eine oder der andere Compiler brauchbarer).

Wenn du das hast machst du im MySQLdb-Ordner ein ``python setup.py build_ext`` und korrigierst solange an den Sachen rum (fehlende Include-Dateien etc) bis es dann kompiliert. Ich kann dir da auch keine genaue Anleitung geben, weil die genauen Schritte immer etwas unterschiedlich sind, je nach Compiler und Software die man kompilieren will.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
wuf
User
Beiträge: 1477
Registriert: Sonntag 8. Juni 2003, 09:50

Montag 4. Mai 2009, 10:15

Hallo Leonidas

In der Doku zu 'timeit'
http://docs.python.org/dev/library/timeit
sind weiter unten Beispiele vorhanden. Weisst du was beim folgenden Code-Schnippsel genau abläuft:

Code: Alles auswählen

def test():
    "Stupid test function"
    L = []
    for i in range(100):
        L.append(i)

if __name__=='__main__':
    from timeit import Timer
    t = Timer("test()", "from __main__ import test")
    print t.timeit()
Bei mir wird der Printbefehl:

Code: Alles auswählen

print t.timeit()
nie ausgeführt oder es dauert eine Ewigkeit bis dies der Fall sein wird?

Gruss wuf :wink:
Take it easy Mates!
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 4. Mai 2009, 10:40

Doch, der wird ausgeführt, nur muss der Code erstmal 1000000 durchlaufen werden, was schon ziemlich lange dauert. Das kannst du ausprobieren indem du dem Aufruf ``number=1`` als Argument mitgibst.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
wuf
User
Beiträge: 1477
Registriert: Sonntag 8. Juni 2003, 09:50

Montag 4. Mai 2009, 10:51

@Leonidas: Danke! Alles klar.

Eine weitere Frage:

Kann eine Zeitmessung mittels 'timeit' als genau bezeichnet werden da scheinbar mit Nanosekunden-Auflösung gemessen wird?

Gruss wuf :wink:
Take it easy Mates!
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Montag 4. Mai 2009, 15:41

wuf hat geschrieben:Kann eine Zeitmessung mittels 'timeit' als genau bezeichnet werden da scheinbar mit Nanosekunden-Auflösung gemessen wird?
Die scheinbare Genauigkeit ist die, die die Timerfunktion des Systems ausspuckt. Wie genau die Zeitmessung wirklich ist -- auf deinem System, mit entsprechenden Hintergrundprozessen und I/O-Last, kannst du am besten feststellen, indem du ein bekanntes Snippet einige Male durchlaufen lässt und die Standardabweichung bestimmst.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
bankkind
User
Beiträge: 106
Registriert: Freitag 14. September 2007, 23:02
Wohnort: Teltow
Kontaktdaten:

Montag 4. Mai 2009, 18:40

Leonidas hat geschrieben:
bankkind hat geschrieben:Weil für mich, der das noch nicht gemacht hat, ist das gefrickel und mir fehlt da leider eine vernünftige Anleitung.
Dann gibt es zwei Möglichkeiten: Python 2.5 nehmen oder MySQLdb-Quellen runterladen, MySQL herunterladen (und hoffen dass die Include-Dateien dabei sind) und einen Compiler herunterladen (Visual C++ Express sollte reichen, oder MinGW. Je nach Software ist der eine oder der andere Compiler brauchbarer).

Wenn du das hast machst du im MySQLdb-Ordner ein ``python setup.py build_ext`` und korrigierst solange an den Sachen rum (fehlende Include-Dateien etc) bis es dann kompiliert. Ich kann dir da auch keine genaue Anleitung geben, weil die genauen Schritte immer etwas unterschiedlich sind, je nach Compiler und Software die man kompilieren will.
Habe mich jetzt für das Python-Downgrade entschieden und es funktioniert. Werde ggf. nochmal versuchen in einer VM mir das mit 2.6 zusammen zufrickeln... aber momentan habe ich keine lust
bankkind
User
Beiträge: 106
Registriert: Freitag 14. September 2007, 23:02
Wohnort: Teltow
Kontaktdaten:

Mittwoch 3. Juni 2009, 19:47

Ich muss das Thema nochmal aufgreifen. Wieso kann ich keine URL's aus einem Tupel verwenden bei URLopen? Welche Alternativen kann ich nutzen?
BlackJack

Mittwoch 3. Juni 2009, 20:32

Was meinst Du mit "URL's (sic) aus einem Tupel"!?
bankkind
User
Beiträge: 106
Registriert: Freitag 14. September 2007, 23:02
Wohnort: Teltow
Kontaktdaten:

Mittwoch 3. Juni 2009, 20:52

Code: Alles auswählen

import urllib
import time

url = ('http://www.ebay.de',
        'http://www.google.de',
        'http://www.wikipedia.de')
        
for a in url:
    start = time.clock() 
    a = urllib.urlopen(url)
    ende = time.clock() 
    result = a + ':%1.2f Sekunden' % (ende - start)
    print result
Sowas zum beispiel!
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

Mittwoch 3. Juni 2009, 21:07

Schau dir mal genau an was du in Zeile 10 machst. Du gibst das tupel als solches bei urlib an und überschreibst mit dem Ergebnis a. Du willst aber eigentlich a als argument von urlopen (und dieses dann auch einem anderen Namen als url zuweisen - sonst würdest du dein tupel mit Adressen überschreiben).
Klarer Fall von schechten Variablennamen... :wink:
Benutzeravatar
cofi
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Mittwoch 3. Juni 2009, 21:31

HerrHagen hat geschrieben:Klarer Fall von schechten Variablennamen... :wink:
Nein, klarer Fall von selbst in den Fuß geschossen ;)
Bei Zeile 12 dürfte es nochmal krachen, bzw die Ausgabe ist nicht das was du haben willst, aber auch hier hilft dir HerrHagens Post.
bankkind
User
Beiträge: 106
Registriert: Freitag 14. September 2007, 23:02
Wohnort: Teltow
Kontaktdaten:

Mittwoch 3. Juni 2009, 21:38

Ach verdammt... Ihr habt recht...

DANKE!
bankkind
User
Beiträge: 106
Registriert: Freitag 14. September 2007, 23:02
Wohnort: Teltow
Kontaktdaten:

Donnerstag 4. Juni 2009, 16:15

So... Wenn ich jetzt noch wüsste wie ich ein TimeOut realisieren könnte...

Code: Alles auswählen

start = time.clock()
urllib.urlopen(a)
if (ende - start) > 5:
   print 'TimeOut'
ende = time.clock()
Ich dachte an diesen Ansatz... das passt jetz zwar nicht, aber ich dachte mir ungefähr so müsste ich es umsetzen. Jemand eine andere Idee?
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 4. Juni 2009, 16:27

``socket.settimeout()`` So wie du es denkst, kann es ja nicht funktionieren, da ``urlopen()`` blockiert.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Antworten