J'ai 2 traitements, j'ai besoin que quand quelque chose s'est passé sur un processus, quelque chose d'autre se produise sur l'autre. Par exemple:

import multiprocessing


def function_1(num):
    while True:
        status = False
        for i in range (num):
            if i == 100:
                status = True
            i +=1


def function_2():
    while True:
        if status == True:
            print("status changed")

if __name__ == '__main__':
    num = 101
    a = multiprocessing.Process(target=function_1,args=(num,))
    b = multiprocessing.Process(target=function_2)


    a.start()
    b.start()


    a.join()
    b.join()

Ce code ne fonctionne évidemment pas, comment puis-je le faire fonctionner? Je n'ai pas besoin d'un processus pour terminer et obtenir le résultat, j'ai besoin que le processus continue après cela ... y a-t-il un moyen de le faire?

Merci!

2
roye1233 23 avril 2020 à 20:34

2 réponses

Meilleure réponse

Au lieu d'utiliser une variable partagée, dans le but de faire attendre function_2 jusqu'à ce que function_1 atteigne un certain état, vous pouvez créer une instance multiprocessing.Queue à passer aux deux fonctions, et profiter de le fait que Queue.get bloque jusqu'à ce que la file d'attente reçoive quelque chose à retirer de la file d'attente, et oblige function_1 à mettre quelque chose dans la file d'attente une fois qu'il atteint l'état souhaité:

import multiprocessing

def function_1(queue, num):
    while True:
        for i in range(num):
            print(i)
            if i == 3:
                queue.put(None)

def function_2(queue):
    queue.get()
    print('do something')

if __name__ == '__main__':
    num = 5
    queue = multiprocessing.Queue()
    a = multiprocessing.Process(target=function_1, args=(queue, num))
    b = multiprocessing.Process(target=function_2, args=(queue,))
    a.start()
    b.start()
2
blhsing 23 avril 2020 à 17:52

Vous avez oublié d'ajouter .join() après le start(). Essaye ça :

a.start()
b.start()

a.join()
b.join()
1
Abhay salvi 23 avril 2020 à 17:41