Συζήτηση
Γεια χαρά, Επισκέπτης
Όνομα χρήστη: Κωδικός: Να με θυμάσαι

ΘΕΜΑ: multiprocessing Process

multiprocessing Process 7 Χρόνια 6 Μήνες πριν #4396

  • Theo
  • Το Άβαταρ του/της Theo
  • Αποσυνδεμένος
  • pytho_
  • Δημοσιεύσεις: 249
  • Ληφθείσες Ευχαριστίες 70
Προσπαθώ να κατανοήσω το multiprocessing και δοκιμάζω τα παραδείγματα του
docs.python.org/3.6/library/multiprocessing.html
και όταν καλώ την την start() δεν δουλεύει πχ
>>> import multiprocessing as mp
>>> import time
>>> def f():
	for i in range(50):
		print(i)
		time.sleep(1)
 
 
>>> pr=mp.Process(target=f)
>>> pr
<Process(Process-2, initial)>
>>> pr.start()
>>> pr.is_alive()
False #Γιατί αυτό
>>> pr.run()
0
1
2
3
 
Τελευταία διόρθωση: 7 Χρόνια 6 Μήνες πριν από Theo.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

multiprocessing Process 7 Χρόνια 6 Μήνες πριν #4397

  • pmav99
  • Το Άβαταρ του/της pmav99
  • Αποσυνδεμένος
  • Author
  • Δημοσιεύσεις: 684
  • Ληφθείσες Ευχαριστίες 111
Δεν ξέρω τι κάνεις, εμένα πάντως μια χαρά μου δουλεύει:
>>> import time
>>> import multiprocessing as mp
>>> 
>>> def f():
...     for i in range(10):
...         print(i)
...         time.sleep(1)
... 
>>> pr=mp.Process(target=f)
>>> print(pr)
<Process(Process-1, initial)>
>>> pr.start()
>>> print(pr)
<Process(Process-1, started)>
>>> print(pr.is_alive())
True
>>> 0
1
2
3
4
5
6
7
8
9
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

multiprocessing Process 7 Χρόνια 6 Μήνες πριν #4398

  • pmav99
  • Το Άβαταρ του/της pmav99
  • Αποσυνδεμένος
  • Author
  • Δημοσιεύσεις: 684
  • Ληφθείσες Ευχαριστίες 111
Τη run() λογικά δεν πρέπει να την καλείς. Αρκεί η start()
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

multiprocessing Process 7 Χρόνια 6 Μήνες πριν #4399

  • Theo
  • Το Άβαταρ του/της Theo
  • Αποσυνδεμένος
  • pytho_
  • Δημοσιεύσεις: 249
  • Ληφθείσες Ευχαριστίες 70
Ναι το ξέρω
το ξαναδοκίμασα και τίποτα
σε python3.4 και 3.6
>>> pr.start()
>>> print(pr)
<Process(Process-1, stopped[1])>
>>> pr.is_alive()
False
>>> 
Θα δοκιμάσω να κάνω νέα εγκατάσταση στην python
Υπάρχει περίπτωση να φταίει κάτι στις ρυθμίσεις των windows?
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

multiprocessing Process 7 Χρόνια 6 Μήνες πριν #4400

  • pmav99
  • Το Άβαταρ του/της pmav99
  • Αποσυνδεμένος
  • Author
  • Δημοσιεύσεις: 684
  • Ληφθείσες Ευχαριστίες 111
A σε windows δεν ξερω. Εγώ linux έχω. Γενικά είναι πιο περίεργα τα windows σε αυτά τα ζητήματα.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

multiprocessing Process 7 Χρόνια 6 Μήνες πριν #4401

  • babaliaris1
  • Το Άβαταρ του/της babaliaris1
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 445
  • Ληφθείσες Ευχαριστίες 75
Σου προτείνω να μάθεις multi-threading και όχι multi-processing.
Για να μπορέσεις να καταλάβεις καλύτερα θα σου κάνω ένα mini μάθημα.

Τι είναι ο παράλληλος προγραμματισμός?
Μέχρι τώρα γνώριζες πως να φτιάχνεις προγράμματα τα οποία τρέχουν μία εντολή κάθε φορά. Στον παράλληλο προγραμματισμό, χρησιμοποιώντας κάποιες μεθόδους φτιάχνουμε προγράμματα τα οποία τρέχουν εντολές παράλληλα.

Τι είναι μία διαδικασία (Process) στον υπολογιστή?
Είναι μία σειρά εντολών που μπορεί να τρέξει ο επεξεργαστής ενός H/Y. Ένα πρόγραμμα δηλαδή. Κάθε διαδικασία (Process) τρέχει ανεξάρτητα από τις άλλες σε έναν από τους επεξεργαστές του Η/Υ και το λειτουργικό σύστημα είναι αυτό που ελέγχει αυτήν τη διαδικασία (Σε ποιόν επεξεργαστή θα τρέξει κτλ).Μέσα σε μία διαδικασία μπορούν να τρέχουν ένα ή και περισσότερα ξεχωριστά νήματα.

Τι είναι ένα νήμα (Thread)?
Είναι και αυτήν μία σειρά εντολών, όπως δηλαδή μία διαδικασία μόνο που η διαφορά είναι ότι τρέχει μέσα σε μία διαδικασία (που σημαίνει ότι μοιράζεται την ίδια τοπική μνήμη στον υπολογιστή με την διαδικασία στην οποία βρίσκεται).

Τι είναι το multi-processing?
Είναι μία μέθοδος με την οποία μπορούμε να δημιουργήσουμε παράλληλα προγράμματα. Ο τρόπος με τον οποίο δουλεύει είναι ότι πολλά προγράμματα (Processes) τρέχουν ανεξάρτητα και επικοινωνούν μεταξύ τους με κάποιον τρόπο έτσι ώστε να αποδώσουν ένα αποτέλεσμα. Κάθε process όμως έχει τον δικό του τοπικό χώρο στην μνήμη του Η/Υ.

Τι είναι το multi-threading?
Ότι και το multi-processing μόνο που τώρα τρέχει μόνο ένα process και μέσα σε αυτό άλλα 1 ή και περισσότερα νήματα (Threads). Φαντάσου το σαν ένα πρόγραμμα μέσα στο οποίο τρέχουν και άλλα mini προγράμματα τα οποία συνεργάζονται μεταξύ τους για να πετύχουν κάτι.

Το καλό με το multi-threading είναι ότι όλα τα threads (μαζί με το main thread όπως το λέμε το οποίο είναι στην ουσία το process) μοιράζονται την ίδια τοπική μνήμη του υπολογιστή, που σημαίνει ότι εάν έχεις μια μεταβλητή petros, τότε όλα τα threads μπορούν να την δουν, να την διαβάσουν αλλά και να την γράψουν. Έτσι η επικοινωνία μεταξύ τους είναι πάρα πολύ εύκολη!

Βέβαια και το multi-processing έχει τα δικά του πλεονεκτήματα, όπως δεν υπάρχει όριο στο πόσα processes τρέχουν σε έναν επεξεργαστή, ενώ για τα threads υπάρχει ένα συγκεκριμένο όριο για τα πόσα μπορεί να τρέξει ο επεξεργαστής.

Αυτά ήθελα να σε πω, για να πάρεις μια ιδέα και να ξέρεις καλύτερα τη κάνεις :)
Τελευταία διόρθωση: 7 Χρόνια 6 Μήνες πριν από babaliaris1.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

multiprocessing Process 7 Χρόνια 6 Μήνες πριν #4403

  • Theo
  • Το Άβαταρ του/της Theo
  • Αποσυνδεμένος
  • pytho_
  • Δημοσιεύσεις: 249
  • Ληφθείσες Ευχαριστίες 70
Με νέα καθαρή εγκατάσταση πάλι δεν δουλεύει
Βρήκα στο StackOverflow αυτό
IDLE redirects standard output and input in various odd ways. Therefore, it not uncommon for something not to work in IDLE.

Ο μόνος τρόπος για να λειτουργήσει είναι να το βάλω σε αρχείο να ενεργοποιώ το Process μεσά
σε
if __name__=='__main__':
και να το τρέχω με python myfile.py

το threading δουλεύει κανονικά
>>> import threading
>>> import time
>>> def f():
    for i in range(50):
        print(i)
        time.sleep(1)
 
 
>>> thr=threading.Thread(target=f)
>>> thr.start()
0
>>> 
1
2
3
4
βλέπουμε ...
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

multiprocessing Process 7 Χρόνια 6 Μήνες πριν #4404

  • Theo
  • Το Άβαταρ του/της Theo
  • Αποσυνδεμένος
  • pytho_
  • Δημοσιεύσεις: 249
  • Ληφθείσες Ευχαριστίες 70
Με το threading έχω δουλέψει λίγο αλλά πάω στο multiprocessing γιατί θεωρώ ότι είναι καλύτερο

Τουλάχιστον διαβάζοντας το introduction αυτό κατάλαβα ότι κάνει ότι και το threading και ακόμα περισσότερα
docs.python.org/3/library/multiprocessin...dule-multiprocessing

Μέχρι στιγμής αν εξαιρέσουμε αυτό που δεν τρέχει σωστά στον indle το .start μου αρέσει περισσότερο από το threading
Τελευταία διόρθωση: 7 Χρόνια 6 Μήνες πριν από Theo.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

multiprocessing Process 7 Χρόνια 6 Μήνες πριν #4405

  • babaliaris1
  • Το Άβαταρ του/της babaliaris1
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 445
  • Ληφθείσες Ευχαριστίες 75
Theo έγραψε:
Με το threading έχω δουλέψει λίγο αλλά πάω στο multiprocessing γιατί θεωρώ ότι είναι καλύτερο

Τουλάχιστον διαβάζοντας το introduction αυτό κατάλαβα
docs.python.org/3/library/multiprocessin...dule-multiprocessing

Μέχρι στιγμής αν εξαιρέσουμε αυτό που δεν τρέχει σωστά στον indle το .start μου αρέσει περισσότερο από το threading

Ναι είναι καλύτερο αλλά ποιο δύσκολο. Δυστυχώς δεν έχω ασχοληθεί με το συγκεκριμένο σε python και δεν ξέρω πως να σε βοηθήσω περαιτέρω :(
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

multiprocessing Process 7 Χρόνια 6 Μήνες πριν #4406

  • pmav99
  • Το Άβαταρ του/της pmav99
  • Αποσυνδεμένος
  • Author
  • Δημοσιεύσεις: 684
  • Ληφθείσες Ευχαριστίες 111
Για απλά πράγματα μακράν το καλύτερο API το έχει το concurrent.futures
docs.python.org/3/library/concurrent.futures.html
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

multiprocessing Process 7 Χρόνια 6 Μήνες πριν #4407

  • Αποστόλης
  • Το Άβαταρ του/της Αποστόλης
  • Αποσυνδεμένος
  • pytho_
  • Δημοσιεύσεις: 148
  • Ληφθείσες Ευχαριστίες 24
Στην python 2.6 σε CentOS 6 τρέχει μια χαρά.
Στο ίδιο μηχάνημα στην python 3.4 έτρεξε με το pr.start() κατ' ευθείαν οπότε - λογικά - το pr.is_alive() έβγαζε false.
Ακόμα κι έτσι πάντως, δίνοντας pr.run() το πρόγραμμα έτρεξε κανονικά.
Τελευταία διόρθωση: 7 Χρόνια 6 Μήνες πριν από Αποστόλης.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

multiprocessing Process 7 Χρόνια 6 Μήνες πριν #4408

  • Theo
  • Το Άβαταρ του/της Theo
  • Αποσυνδεμένος
  • pytho_
  • Δημοσιεύσεις: 249
  • Ληφθείσες Ευχαριστίες 70
Σε διαφορετικά λειτουργικά δουλεύει διαφορετικά.

Windows default : spawn
The parent process starts a fresh python interpreter process.

Unix default : fork
The parent process uses os.fork() to fork the Python interpreter.

υπάρχει και ένας τρόπος ακόμα το
forkserver
When the program starts and selects the forkserver start method, a server process is started.

Δυστηχώς τα windows υποστηρίζουν μόνο το 1ο ενώ το Unix όλα

Με χαλάει οτι δεν μπορώ να χρησιμοποιώ τον indle για να δοκιμάσω κώδικα αλλά το κάνω με ολόκληρα αρχεία .py και όλα εντάξει.

Επίσης όταν παιρνάω τα data με ένα τρόπο ανταλλαγής δεδομένων(Pipe ή Queue)
μου δουλεύει κανονικά και στον indle δηλαδή τα παρακάτω δύο παραδείγματα είναι οκ
from multiprocessing import Process, Queue
q = Queue()
def f(q):
    q.put([42, None, 'hello'])
 
if __name__ == '__main__':
    p = Process(target=f, args=(q,))
    p.start()
    print(q.get())    # prints "[42, None, 'hello']"
    p.join()
from multiprocessing import Process, Pipe
parent, child = Pipe()
def f(conn):
    conn.send([42, None, 'hello'])
    conn.close()
 
if __name__ == '__main__':
 
    p = Process(target=f, args=(child,))
    p.start()
    print(parent.recv())   # prints "[42, None, 'hello']"
    p.join()

Ευχαριστώ όλους
Τελευταία διόρθωση: 7 Χρόνια 6 Μήνες πριν από Theo.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Συντονιστές: pmav99
Χρόνος δημιουργίας σελίδας: 0.436 δευτερόλεπτα

Μοιράσου το!

Powered by CoalaWeb

Λίστα Ταχυδρομείου