Τα πάντα για την Python

...του ubuntu και έργων ΕΛ/ΛΑΚ (Έργα-Οδηγοί-Προτάσεις)

Συντονιστής: konnn

Re: Τα πάντα για την Python

Δημοσίευσηαπό pmav99 » 07 Μάιος 2012, 13:16

Άντε μιας και το ανοίξαμε το θέμα.

Αν ξέρεις fortran, το f2py είναι καλό και σχετικά απλό. Ιδίως αν το bottleneck είναι μία ή δύο συναρτήσεις (με loops γιατί αυτά είναι αργά στην python). Επίσης, αν και δεν το έχω δοκιμάσει πρέπει να βολεύει για να χρησιμοποιήσεις legacy fortran code. Από πλευράς development νομίζω ότι είναι σχετικά παρατημένο.

Τουλάχιστον όσον αφορά τον αριθμό των project που τη χρησιμοποιούν, η Cython σήμερα είναι η κυρίαρχη επιλογή. Αναπτύσσεται ενεργά και μπορεί να χρησιμοποιηθεί πάντα. Στην πραγματικότητα είναι μία ξεχωριστή γλώσσα από την Python. Ένα υπερσύνολο της python για την ακρίβεια, στο οποίο μπορείς να δηλώσεις τύπους μεταβλητών, ώστε να μπορεί να κάνει ο compiler optimizations. Το κακό είναι ότι έτσι, ο κώδικας δεν είναι συμβατός με την Python, οπότε αν χρησιμοποιείς την Python για το development του αλγόριθμου, πρέπει ότι αλλαγές κάνεις να τις περνάς και στα δύο codebases. Αν τη χρησιμοποιείς μόνο για τα bottlenecks της εφαρμογής (όπως είναι και το σωστό) δεν είναι ιδιαίτερο πρόβλημα.
Υπάρχει και το λεγόμενο "pure python mode" το οποίο είναι εξαιρετικά βολικό γιατί σου επιτρέπει να μην πειράξεις καθόλου τον κώδικα σου (οπότε τρέχει κανονικά με απλή python). Δηλώνεις μόνο τα headers των συναρτήσεων σου και τους τύπους των μεταβλητών τους σε ένα ξεχωριστό αρχείο. Τουλάχιστον μέχρι τα Χριστούγεννα περίπου που το είχα τσεκάρει τελευταία φορά, είχε κάποιες περιορισμούς το mode αυτό αλλά στις συνήθεις περιπτώσεις ήταν οκ.

O Nuitka είναι πιο καινούριος και πιο φιλόδοξος από τα άλλα. Στοχεύει σε 100% compatibility με τον κώδικα της python κάτι το οποίο σε μεγάλο βαθμό το έχει επιτύχει. Αναπτύσσεται ενεργά, αλλά ακόμα "στήνεται" η υποδομή και δεν εχει δωθεί έμφαση στην ταχύτητα. Αν πετύχει τους στόχους, του θα είναι υπέροχο :thumbup:

Απαραίτητο σε όλα αυτά είναι να υπάρχουν tests γιατί υπάρχει περίπτωση ο compiled κώδικας να μη δίνει ακριβώς τα ίδια αποτελέσματα με τον κώδικα της "καθαρής" python. Την είχα πατήσει μια φορά με ένα unsigned int στη cython :sick:
pmav99
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 574
Εγγραφή: 05 Ιούλ 2008, 14:29
Εκτύπωση


Re: Τα πάντα για την Python

Δημοσίευσηαπό Ilias95 » 21 Ιουν 2012, 18:39

Χρησιμοποιώντας το module subprocess μπορούμε να εκτελέσουμε μια εντολή για μετατροπή video μέσω του ffmpeg:
Κώδικας: Επιλογή όλων
import subprocess, shlex

cmd = 'ffmpeg -y -i /foo/bar.mpeg /foo/bar.flv'
subprocess.Popen(shlex.split(cmd))


Αν τρέξουμε τον παραπάνω κώδικα (αλλάζοντας φυσικά τα ονόματα των αρχείων) θα δούμε ότι θα βλέπαμε αν τρέχαμε σκέτη την εντολή στο τερματικό.
Δηλαδή θα βλέπουμε την έξοδο του ffmpeg η οποία θα ανανεώνεται συνεχώς μέχρι να τελειώσει η μετατροπή.

Το να κρατήσουμε αυτή την έξοδο σε μία μεταβλητή σε ένα πρόγραμμα είναι πολύ εύκολο.
Υπάρχει όμως κάποιος τρόπος να παίρνουμε την έξοδο και να την χρησιμοποιούμε ενόσω η μετετροπή είναι σε εξέλιξη;

Συγκεκριμένα το ffmpeg μας δίνει συνεχώς στην έξοδο του σε ποιο χρονικό σημείο μετατροπής του video που του δώσαμε βρίσκεται (πχ. time=3.80).
Θέλω να παίρνω αυτό το χρονικό σημείο κατά τη διάρκεια της μετατροπής ώστε να μπορώ να υπολογίζω και να εμφανίζω την πρόοδο, ενώ η μετατροπή βρίσκεται σε εξέλιξη.

Καμιά ιδέα;
Ευχαριστώ εκ των προτέρων.
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό clepto » 21 Ιουν 2012, 18:46

ίσως αν χρησιμοποιείς κάτι σαν
Κώδικας: Επιλογή όλων
while process.poll() is None:
και εδω να αποθηκευεις την εξοδο σε μεταβλητη

είναι η subprocess επιστρέφει None όταν η διεργασία δεν έχει τελειώσει ακόμα
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό Ilias95 » 21 Ιουν 2012, 18:51

clepto έγραψε:ίσως αν χρησιμοποιείς κάτι σαν
Κώδικας: Επιλογή όλων
while process.poll() is None:
και εδω να αποθηκευεις την εξοδο σε μεταβλητη

είναι η subprocess επιστρέφει None όταν η διεργασία δεν έχει τελειώσει ακόμα

Ακριβώς αυτό είναι το πρόβλημα μου. :P
Πως ακριβώς θα αποθηκεύσω την έξοδο σε μεταβλητή;

Αν κρατήσω τα stdout, stderr από την διεργασία μπορώ να τα διαβάσω μόνο όταν αυτή τελειώσει.
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό clepto » 21 Ιουν 2012, 19:05

κοίτα αυτό μήπως βοηθήσει http://stackoverflow.com/questions/4417 ... is-running
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό Ilias95 » 21 Ιουν 2012, 19:47

clepto έγραψε:κοίτα αυτό μήπως βοηθήσει http://stackoverflow.com/questions/4417 ... is-running

Δυστυχώς δεν μπορώ να πάρω το επιθυμητό αποτέλεσμα με κάποιο απ' τα code samples που δίνονται. :/
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό medigeek » 21 Ιουν 2012, 21:54

Ilias95 έγραψε:
Το να κρατήσουμε αυτή την έξοδο σε μία μεταβλητή σε ένα πρόγραμμα είναι πολύ εύκολο.
Υπάρχει όμως κάποιος τρόπος να παίρνουμε την έξοδο και να την χρησιμοποιούμε ενόσω η μετετροπή είναι σε εξέλιξη;

Δεν είχαμε αναλύσει και λύσει παλιά με παραδείγματα αυτό που ζητάς; Μου φαίνεται πολύ γνωστό...
Edit: Αυτό εδώ; http://forum.ubuntu-gr.org/viewtopic.ph ... 67#p219467 :)
Τελευταία επεξεργασία από medigeek και 21 Ιουν 2012, 21:59, έχει επεξεργασθεί 1 φορά/ες συνολικά
Κύπριος; Κόπιασε στο ubuntu-cy! ┃ Launchpad Debian Github
Οδηγός για νεοεισερχόμενους -- Αρχικές οδηγίες για αρχάριους χρήστες του Ubuntu

1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 12.10 quantal 3.5.0-21-generic 64bit (en_US.UTF-8, GNOME cinnamon2d), Ubuntu 3.5.0-19-generic, Windows 7
3 Intel Core2 Duo CPU E6550 2.33GHz ‖ RAM 5970 MiB ‖ MSI MS-7235
4 nVidia G73 [GeForce 7300 GT] [10de:0393] {nvidia}
5 eth0: Realtek RTL-8110SC/8169SC Gigabit Ethernet [10ec:8167] (rev 10)
Άβαταρ μέλους
medigeek
Freedom
Freedom
 
Δημοσιεύσεις: 5023
Εγγραφή: 24 Μάιος 2008, 14:49
Τοποθεσία: Σερβία/Κύπρος
Launchpad: medigeek
IRC: savvas
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό clepto » 21 Ιουν 2012, 21:56

είχαμε αναλύσει για την έξοδο της subprocess αλλά τότε λέγαμε αφού έχει τελειώσει νομίζω...
όχι καθώς τρέχει
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό medigeek » 21 Ιουν 2012, 22:03

Κύπριος; Κόπιασε στο ubuntu-cy! ┃ Launchpad Debian Github
Οδηγός για νεοεισερχόμενους -- Αρχικές οδηγίες για αρχάριους χρήστες του Ubuntu

1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 12.10 quantal 3.5.0-21-generic 64bit (en_US.UTF-8, GNOME cinnamon2d), Ubuntu 3.5.0-19-generic, Windows 7
3 Intel Core2 Duo CPU E6550 2.33GHz ‖ RAM 5970 MiB ‖ MSI MS-7235
4 nVidia G73 [GeForce 7300 GT] [10de:0393] {nvidia}
5 eth0: Realtek RTL-8110SC/8169SC Gigabit Ethernet [10ec:8167] (rev 10)
Άβαταρ μέλους
medigeek
Freedom
Freedom
 
Δημοσιεύσεις: 5023
Εγγραφή: 24 Μάιος 2008, 14:49
Τοποθεσία: Σερβία/Κύπρος
Launchpad: medigeek
IRC: savvas
Εκτύπωση

ΠροηγούμενηΕπόμενο

Επιστροφή στο Ανάπτυξη Λογισμικού / Αλγόριθμοι