Δημοσιεύτηκε: 26 Νοέμ 2011, 22:17
Ηλία, αν αυτό που θέλεις να κάνεις είναι να υπολογίσεις ένα progression rate ή κάτι παρόμοιο, νομίζω ότι δεν υπάρχει γενικός τρόπος για να το πετύχεις. Αν είναι μετρήσιμο αυτό που κάνεις (πχ αντιγράφεις αρχεία) οκ, το κάνεις έμμεσα. Για μια τυχαία διεργασία όμως ο χρόνος εκτέλεσης εξαρτάται από πολλά πράγματα όπως CPU Load, μνήμη κτλ. Δε νομίζω να γίνεται να το υπολογίσεις από πριν. Δεν είναι θέμα γλώσσας, σε οποιαδήποτε γλώσσα ισχύει αυτό.
Αν αυτό που θέλεις να κάνεις είναι απλά να βελτιστοποιήσεις την απόδοση του κώδικα σου, τότε το timeit είναι και βολικό και εύχρηστο. Σε συνδυασμό με ipython ίσως μάλιστα να είναι ακόμα πιο βολικό και πιο εύχρηστο.
Αν αυτό που θέλεις να κάνεις είναι να βρεις τα bottlenecks του προγράμματος σου, τότε η διαδικασία ονομάζεται Profiling και όπως είπαν και οι προλαλήσαντες τα απαραίτητα modules υπάρχουν στην standard library (profile στην Python 3 και cProfile στην Python 2). Για να έχεις γραφικό output μπορείς να χρησιμοποιήσεις το runsnakerun. Να ξέρεις ότι τα modules αυτά σου υποδεικνύουν ποια συνάρτηση σου είναι αργή. Αν χρειάζεσαι πιο λεπτομερή ανάλυση μπορείς να χρησιμοποιήσεις to line_profiler. Παραδείγματα χρήσης των παραπάνω θα βρεις σε αυτό του tutorial του Ian Ozvald (1 και 2)
Αν αυτό που θέλεις να κάνεις είναι απλά να βελτιστοποιήσεις την απόδοση του κώδικα σου, τότε το timeit είναι και βολικό και εύχρηστο. Σε συνδυασμό με ipython ίσως μάλιστα να είναι ακόμα πιο βολικό και πιο εύχρηστο.
Αν αυτό που θέλεις να κάνεις είναι να βρεις τα bottlenecks του προγράμματος σου, τότε η διαδικασία ονομάζεται Profiling και όπως είπαν και οι προλαλήσαντες τα απαραίτητα modules υπάρχουν στην standard library (profile στην Python 3 και cProfile στην Python 2). Για να έχεις γραφικό output μπορείς να χρησιμοποιήσεις το runsnakerun. Να ξέρεις ότι τα modules αυτά σου υποδεικνύουν ποια συνάρτηση σου είναι αργή. Αν χρειάζεσαι πιο λεπτομερή ανάλυση μπορείς να χρησιμοποιήσεις to line_profiler. Παραδείγματα χρήσης των παραπάνω θα βρεις σε αυτό του tutorial του Ian Ozvald (1 και 2)