2017-08-09 2 views
0

J'ai deux processus. dans le futur on devrait contrôler une socket web l'autre thread reçoit des messages d'un module funk.Communication multitraitement inter

Maintenant, je veux avoir un rappel on_message, que je peux envoyer quelque chose via NRF.

J'ai donc fait une expérience abstraite. mais je ne peux pas trouver un appel à appeler d'un autre processus.

import multiprocessing 
from multiprocessing import Queue, Process 

def main(): 
    main_queue = Queue() 
    slave_queue = Queue() 
    main_process = multiprocessing.Process(target=Main, args=(slave_queue, main_queue)) 
    slave_process = multiprocessing.Process(target=SlaveThread, args=(main_queue, slave_queue)) 

    main_process.start() 
    slave_process.start() 
    main_process.join() 
    slave_process.join() 


class SlaveThread: 
    def __init__(self, main_queue, slave_queue): 
     main_queue.put(self.callback) 
     while True: 
      slave_queue.get()() 

    def print_slave_thread(self): 
     print("SlaveThread") 

    def callback(self): 
     print("callback from Slave") 


class Main: 
    def __init__(self, main_queue, slave_queue): 
     slave_queue.put(self.callback) 
     while True: 
      main_queue.get()() 

    def print_what_websocket_has_send(self): 
     print("MainThread") 

    def callback(self): 
     print("callback from Main") 


if __name__ == '__main__': 
    main() 

Malheureusement, cette approche ne fonctionne pas.

Répondre

0

Je ne suis pas sûr si vous pouvez envoyer des fonctions à un multiprocessus. Vous pouvez, cependant, envoyer des informations dans un Queue qui est ensuite lu par votre sous-processus. Vous pouvez lui envoyer un dict puis l'étendre en **kwargs si cela était nécessaire.

+0

je vais essayer, merci pour votre réponse rapide – Ipad