1

Ich muss sagen, dass Multiprozessing ist etwas Neues für mich. Ich lese etwas darüber, aber es macht mich mehr verwirrt. Ich möchte es an einem einfachen Beispiel verstehen. Nehmen wir an, wir haben zwei Funktionen in der ersten. Ich inkrementiere nur 'a' Variable und weise sie dann der Variablen 'number' zu, in Sekunde starte ich die erste Funktion und jede Sekunde will ich 'number' Variable ausgeben. Es sollte so aussehen:Parallele Multiprocessing in Python einfach Beispiel

global number 

def what_number(): 
    a=1 
    while True: 
     a+=1 
     number=a 

def read_number(): 
    while True: 
     --> #here I need to start 'what_number' function <-- 
     time.sleep(1) 
     print(number) 


if __name__ == "__main__": 
    read_number() 

Wie kann ich das tun? Gibt es einen einfachen und richtigen Weg, das zu tun?

UPDATE:

Ich sah ich wirklich dankbar noxdafox zu beantworten bin, aber es ist nicht genau das, was ich will. Zuallererst möchte ich keinen Wert in der ersten Funktion senden ('main' in noxdafox code). Zweitens will ich nicht alle Werte bekommen, also wird es nicht funktionieren. Ich muss nach jeder zweiten Anzahl von While-Loops kommen. Code sollte so etwas wie:

import multiprocessing 
import time 

number = 0 


def child_process(): 
    global number 
    while True: 
     number += 1 
     print(number) 


def main(): 
    process = multiprocessing.Process(target=child_process) 
    process.start() 

    while True: 
     print("should get same number:",number) 
     time.sleep(0.001) 

if __name__ == "__main__": 
    main() 

Wenn u oben Code ausführen Sie bekommen so etwas wie: enter image description here

aber diese blau ausgewählten Werte gleich sein sollte! und das ist das Hauptproblem :)

P. S sorry für Chaos

+0

http://chriskiehl.com/article/parallelism-in-one-line/ – user45245

+0

'global number'? – alfasin

+1

Mögliches Duplikat von [multiprocessing.Pool: Wann verwenden Sie apply, wenden Sie \ _async oder map?] An (https://stackoverflow.com/questions/8533318/multiprocessing-pool-when-to-use-apply-apply-async Oder-Karte) – alfasin

Antwort

0

Ok es dauert einige Zeit, aber ich habe es herausgefunden. Alles, was es war Sharing state between processes Jetzt funktioniert alles wie Charme. Code:

from multiprocessing import Process, Value 
import time 


def child_process(number): 
    number.value = 0 
    while True: 
     number.value += 1 
     #print(number) 


def main(): 
    num = Value('i') 
    process = Process(target=child_process, args=(num,)) 
    process.start() 
    while True: 
     print("should get same number:", num.value) 
     time.sleep(1) 

if __name__ == "__main__": 
    main() 
0

Als Prozesse leben in getrennten Speicheradressräume, können Sie keine Variablen teilen. Darüber hinaus verwenden Sie globale Variablen falsch. Here können Sie ein Beispiel zur Verwendung globaler Variablen sehen.

Die einfachste Möglichkeit, Informationen zwischen Prozessen auszutauschen, ist über eine Pipe oder Queue.

import multiprocessing 

def child_process(queue): 
    while True: 
     number = queue.get() 
     number += 1 
     queue.put(number) 

def main(): 
    number = 0 
    queue = multiprocessing.Queue() 
    process = multiprocessing.Process(target=child_process, args=[queue]) 
    process.start() 

    while True: 
     print("Sending %d" % number) 
     queue.put(number) 

     number = queue.get() 
     print("Received %d" % number) 

     time.sleep(1) 

if __name__ == "__main__": 
    main() 
+0

Danke für Ihre Antwort, aber in diesem Fall bekomme ich die Nummer für 1 alle 1sec erhöht. Der Punkt ist, Anzahl der While-Loops zu bekommen, weißt du, was ich meine? – KyluAce

+0

Ich meine, um den Wert der Zahl, wo die Zahl ist die ganze Zeit für 1sek in der While-Schleife erhöht :) – KyluAce

+0

gibt es eine Möglichkeit, so etwas zu tun? https://pastebin.com/ehMv1j1p? Aber für jetzt gibt es die ganze Zeit 0 – KyluAce