Ilias95 Δημοσ. 7 Δεκεμβρίου 2015 Μέλος Δημοσ. 7 Δεκεμβρίου 2015 Χμμ, δεν το είχα σκεφτεί ότι ίσως γίνεται να έχω "non-blocking sockets".Αν και λίγο πρόχειρα που το σκέφτομαι, ίσως να περιπλέκεται κομματάκι η υλοποίηση αλλά σίγουρα θα το προσπαθήσω.Ευχαριστώ για τις απαντήσεις.
Ilias95 Δημοσ. 11 Δεκεμβρίου 2015 Μέλος Δημοσ. 11 Δεκεμβρίου 2015 Just in case που κάποιος θέλει να κάνει κάτι αντίστοιχο, ανακάλυψα ότι στην python υπάρχουν έτοιμα built-in modules που διευκολύνουν στο να κάνουμε ακριβώς αυτό που συζητήσαμε.Για python2 και python3: asyncoreΓια python3.4+: asyncioΑπ' το asyncore: This module provides the basic infrastructure for writing asynchronous socket service clients and servers.There are only two ways to have a program on a single processor do “more than one thing at a time.” Multi-threaded programming is the simplest and most popular way to do it, but there is another very different technique, that lets you have nearly all the advantages of multi-threading, without actually using multiple threads. It’s really only practical if your program is largely I/O bound. If your program is processor bound, then pre-emptive scheduled threads are probably what you really need. Network servers are rarely processor bound, however. If your operating system supports the select() system call in its I/O library (and nearly all do), then you can use it to juggle multiple communication channels at once; doing other work while your I/O is taking place in the “background.” Although this strategy can seem strange and complex, especially at first, it is in many ways easier to understand and control than multi-threaded programming.... Cheers!
mad-proffessor Δημοσ. 11 Δεκεμβρίου 2015 Δημοσ. 11 Δεκεμβρίου 2015 For the record πάντως μιας και ο defacer και ο papi είχαν δίκιο ότι δε χρειάζοσουν πολλά processes για κάτι ως επι τω πλέιστω network bound, αν ήθελες παραπάνω απο μία processes αρκούσε μια κλήση της os.fork() κάτω απο τις root κλήσεις/συναρτησεις σου. Χρήσιμο το asyncore κάπου το είχα πετύχει και εγω να σου πω αλλά δε το θυμόμουν. Αν τελειώσεις το pxe/tftp server σου στείλε και ενα link. P.S: Αν όμως ήθελες να στείλεις το image σου σε πάνω απο 100-200 μηχανάκια(corporate environment) σίγουρα χρειάζοσουν παραπάνω απο μία process παντως.
Ilias95 Δημοσ. 11 Δεκεμβρίου 2015 Μέλος Δημοσ. 11 Δεκεμβρίου 2015 Αν τελειώσεις το pxe/tftp server σου στείλε και ενα link. Έχω να φροντίσω μερικά βασικά πραγματάκια ακόμα, αλλά είμαι κοντά στο πρώτο release: https://github.com/Ilias95/apts Το πρώτο release θα είναι πράγματι multi-threaded, αλλά στην συνέχεια θα κοιτάξω να χρησιμοποιήσω το asyncio. Επίσης τελικά συνειδητοποίησα ότι όντως χρειάζομαι δικαιώματα root που λέγαμε, για να κάνω bind σε κάποιο well-known UDP port. Οπότε αυτό που κάνω είναι να ανοίγω την socket σαν root και αμέσως μετά να κάνω drop τα root privileges με setuid/setgid (δεν βρήκα κάτι καλύτερο). Σε επόμενες εκδόσεις θα κοιτάξω να το "δέσω" και με systemd γράφοντας service files και ότι άλλο χρειάζεται για να μπορεί κάποιος να τον εκκινεί σαν δαίμονα με τον κλασσικό πλέον τρόπο.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα