masteripper Δημοσ. 4 Μαρτίου 2021 Δημοσ. 4 Μαρτίου 2021 Γεια χαρά σε όλους Έχω 1 θεματάκι και δεν μπορώ να βρώ πως ακριβώς πρέπει να το αντιμετωπίσω 1 έχω 1 web socket το οποίο "πυροβολεί" συνέχεια αρκετές φορές μέσα στο δευτερόλεπτο. Επειδή δεν χρειάζομαι τόσο γρήγορη ενημέρωση και επιπλέον θέλω να αποθηκεύω τα δεδομένα σε MySQL σκεφτόμουν το εξής σενάριο Να τρέχει για λίγο σε 1 thread το μάζεμα των στοιχείων και μετά όταν φτάσει σε 1 ικανό αριθμό εγγραφών (ίσως να κάνω και 1 μικρό Delay ενδιάμεσα) να γυρνάω στο άλλο thread ώστε να τα στέλνει στον MySQL και μετά να γυρνάει στην συλλογή Θεωρώ ότι πάνω κάτω μπορώ να υπολογίσω 1 ικανοποιητικό παράθυρο ώστε το Insert Να παίρνει τον χρόνο του Delay και η όλη διαδικασία να μην έχει σπασίματα. Δυστυχώς απο Threads δεν έχω γνώση και οποιαδήποτε βοήθεια ευπρόσδεκτη.
kaliakman Δημοσ. 4 Μαρτίου 2021 Δημοσ. 4 Μαρτίου 2021 (επεξεργασμένο) Η Python δεν έχει threads με την έννοια που υπάρχουν σε άλλες γλώσσες. Πάντα τρέχει σε ένα core οπότε όσα Thread και να φτιάξεις (μάλλον) δεν θα δεις επιτάχυνση. Δες εδώ και για παραπάνω εξηγήσεις. Επεξ/σία 4 Μαρτίου 2021 από kaliakman
masteripper Δημοσ. 4 Μαρτίου 2021 Μέλος Δημοσ. 4 Μαρτίου 2021 Μάλλον για Producer - Consumer με βλέπω....
Επισκέπτης Δημοσ. 4 Μαρτίου 2021 Δημοσ. 4 Μαρτίου 2021 Αν κατάλαβα σωστά θέλεις να batchαρεις τα writes? Ενα queue σου κάνει την δουλειά, το multi thread τι θα σου προσφέρει εκτός από πονοκέφαλο;
DrKo Δημοσ. 16 Αυγούστου 2021 Δημοσ. 16 Αυγούστου 2021 Στις 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. 1
Lomar Δημοσ. 18 Σεπτεμβρίου 2021 Δημοσ. 18 Σεπτεμβρίου 2021 (επεξεργασμένο) Αν και πάνω από 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 είναι αρκετά. Επεξ/σία 18 Σεπτεμβρίου 2021 από Lomar 1
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα