Προς το περιεχόμενο

Python switch threads


masteripper

Προτεινόμενες αναρτήσεις

Γεια χαρά σε όλους

Έχω 1 θεματάκι και δεν μπορώ να βρώ πως ακριβώς πρέπει να το αντιμετωπίσω

1 έχω 1 web socket το οποίο "πυροβολεί" συνέχεια αρκετές φορές μέσα στο δευτερόλεπτο.

Επειδή δεν χρειάζομαι τόσο γρήγορη ενημέρωση και επιπλέον θέλω να αποθηκεύω τα δεδομένα σε MySQL σκεφτόμουν το εξής σενάριο

Να τρέχει για λίγο σε 1 thread το μάζεμα των στοιχείων και μετά όταν φτάσει σε 1 ικανό αριθμό εγγραφών (ίσως να κάνω και 1 μικρό Delay ενδιάμεσα) να γυρνάω στο άλλο thread ώστε να τα στέλνει στον MySQL και μετά να γυρνάει στην συλλογή

Θεωρώ ότι πάνω κάτω μπορώ να υπολογίσω 1 ικανοποιητικό παράθυρο ώστε το Insert Να παίρνει τον χρόνο του Delay και η όλη διαδικασία να μην έχει σπασίματα.

Δυστυχώς απο Threads δεν έχω γνώση και οποιαδήποτε βοήθεια ευπρόσδεκτη.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

Η Python δεν έχει threads με την έννοια που υπάρχουν σε άλλες γλώσσες. Πάντα τρέχει σε ένα core οπότε όσα Thread και να φτιάξεις (μάλλον) δεν θα δεις επιτάχυνση.
Δες εδώ και για παραπάνω εξηγήσεις.

Επεξ/σία από kaliakman
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Επισκέπτης

Αν κατάλαβα σωστά θέλεις να batchαρεις τα writes? Ενα queue σου κάνει την δουλειά, το multi thread τι θα σου προσφέρει εκτός από πονοκέφαλο;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • 5 μήνες μετά...
Στις 4/3/2021 στις 10:49 ΠΜ, masteripper είπε

Γεια χαρά σε όλους

Έχω 1 θεματάκι και δεν μπορώ να βρώ πως ακριβώς πρέπει να το αντιμετωπίσω

1 έχω 1 web socket το οποίο "πυροβολεί" συνέχεια αρκετές φορές μέσα στο δευτερόλεπτο.

Επειδή δεν χρειάζομαι τόσο γρήγορη ενημέρωση και επιπλέον θέλω να αποθηκεύω τα δεδομένα σε MySQL σκεφτόμουν το εξής σενάριο

Να τρέχει για λίγο σε 1 thread το μάζεμα των στοιχείων και μετά όταν φτάσει σε 1 ικανό αριθμό εγγραφών (ίσως να κάνω και 1 μικρό Delay ενδιάμεσα) να γυρνάω στο άλλο thread ώστε να τα στέλνει στον MySQL και μετά να γυρνάει στην συλλογή

Θεωρώ ότι πάνω κάτω μπορώ να υπολογίσω 1 ικανοποιητικό παράθυρο ώστε το Insert Να παίρνει τον χρόνο του Delay και η όλη διαδικασία να μην έχει σπασίματα.

Δυστυχώς απο Threads δεν έχω γνώση και οποιαδήποτε βοήθεια ευπρόσδεκτη.

Ψάχνοντας κάτι για Python στο forum, είδα και αυτό το thread. 

Με Python μπορείς να έχεις αληθινό concurrency εάν χρησιμοποιήσεις το `multiprocessing` module, το οποίο παρακάμπτει τους περιορισμούς με ένα "thread τη φορά". Γενικά, υπάρχει η παρανόηση ότι η Python μπορεί να έχει μόνο ένα thread active, αλλά αυτό δεν είναι αλήθεια. 

Για παραπάνω ανάλυση του multiprocessing και πώς μπορείς να το χρησιμοποιήσεις, δες τα official docs

Για σύγκριση των threads με τα processes σε Python, μπορείς να το googlάρεις και να βρεις αρκετά αποτελέσματα. 

Υ.Γ. Για την ακρίβεια, με το multiprocessing module, δημιουργούνται διαφορετικά processes τα οποία έχουν το δικό τους GIL και άρα έχουν τον περιορισμό με το "ένα thread τη φορά". Όμως, με το multiprocessing μπορεί κανείς να δημιουργήσει αρκετά processes (τα οποία μπορούν να επικοινωνούν από queues ή pipes γενικότερα), στην ουσία παρακάμπτοντας τον περιορισμό του GIL. 

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • 1 μήνα μετά...
Δημοσ. (επεξεργασμένο)

Αν και πάνω από 1 μήνα μετά, πιστεύω πως αξίζει να αναφερθεί και αυτό το εξαιρετικό library για multiprocessing σε python το οποίο έχει και καλύτερο performance από το native (όπως πχ το uvloop vs native async):

https://towardsdatascience.com/mpire-for-python-multiprocessing-is-really-easy-d2ae7999a3e9

Αν το θέμα σου αφορά μόνο Ι/Ο και καθόλου processing τα native multithread libs της python είναι αρκετά.

Επεξ/σία από Lomar
  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...