Seite 1 von 2

Verfasst: Montag 4. Mai 2009, 09:16
von bankkind
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.

Verfasst: Montag 4. Mai 2009, 09:40
von Leonidas
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.

Verfasst: Montag 4. Mai 2009, 10:15
von wuf
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:

Verfasst: Montag 4. Mai 2009, 10:40
von Leonidas
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.

Verfasst: Montag 4. Mai 2009, 10:51
von wuf
@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:

Verfasst: Montag 4. Mai 2009, 15:41
von birkenfeld
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.

Verfasst: Montag 4. Mai 2009, 18:40
von bankkind
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

Verfasst: Mittwoch 3. Juni 2009, 19:47
von bankkind
Ich muss das Thema nochmal aufgreifen. Wieso kann ich keine URL's aus einem Tupel verwenden bei URLopen? Welche Alternativen kann ich nutzen?

Verfasst: Mittwoch 3. Juni 2009, 20:32
von BlackJack
Was meinst Du mit "URL's (sic) aus einem Tupel"!?

Verfasst: Mittwoch 3. Juni 2009, 20:52
von bankkind

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!

Verfasst: Mittwoch 3. Juni 2009, 21:07
von HerrHagen
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:

Verfasst: Mittwoch 3. Juni 2009, 21:31
von cofi
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.

Verfasst: Mittwoch 3. Juni 2009, 21:38
von bankkind
Ach verdammt... Ihr habt recht...

DANKE!

Verfasst: Donnerstag 4. Juni 2009, 16:15
von bankkind
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?

Verfasst: Donnerstag 4. Juni 2009, 16:27
von Leonidas
``socket.settimeout()`` So wie du es denkst, kann es ja nicht funktionieren, da ``urlopen()`` blockiert.

Verfasst: Freitag 5. Juni 2009, 08:09
von bankkind
JA sowas hatte ich mirbereits gedacht.

Aber: Wie kann ich socket mit urllib kombinieren?

Verfasst: Freitag 5. Juni 2009, 08:14
von Leonidas
bankkind hat geschrieben:Aber: Wie kann ich socket mit urllib kombinieren?
``socket.settimeout()`` setzen.

Verfasst: Freitag 5. Juni 2009, 09:16
von bankkind
ich bekomms nicht hin...

Der greift nie!

Verfasst: Freitag 5. Juni 2009, 15:41
von bankkind
Wie muss ich denn socket Konfigurieren?

Verfasst: Samstag 6. Juni 2009, 10:35
von HWK
Bei urllib2.urlopen kann timeout als Argument übergeben werden.
MfG
HWK