J'étudie Python multitraitement Pipe. Mon but est de faire deux processus indépendants, l'un d'entre eux envoie un message à l'autre cinq fois. Je n'ai aucun problème à l'exécuter, mais il montre juste leurs PIDs et c'est tout. Qu'est-ce que j'ai eu de mal avec ce code? Mon environnement est Windows 10 (64 bits) et Python 3.6.1 (32 bits).Je ne vois pas pourquoi ce code ne fonctionne pas (multiprocessing.Pipe)
import os
import multiprocessing as mp
import time
global sending_end, receiving_end
sending_end, receiving_end = mp.Pipe()
def sender(sending_end=sending_end):
print('SND PID: ', os.getpid())
for _ in range(5):
sending_end.send('test')
time.sleep(1)
class receiver(mp.Process):
def __init__(self):
mp.Process.__init__(self)
def run(self, receiving_end=receiving_end):
print('REC PID: ', os.getpid())
print(receiving_end.recv())
time.sleep(1)
if __name__ == '__main__':
print('MAIN PID: ', os.getpid())
s = mp.Process(target = sender, args=(sending_end,))
s.start()
r = receiver()
r.start()
mp.freeze_support()
Pourquoi les tuyaux d'utilisation? Il y a une [Queue] (https://docs.python.org/3.3/library/multiprocessing.html?highlight=multiprocessing#exchanging-objects-between-processes), qui fait tout pour vous. – uphill
@uphill Je pense que l'utilisation de tuyaux sera plus compatible au cas où il y aurait des chances d'échanger des messages bidirectionnellement entre les processus. – maynull
si vous n'utilisez pas python comme autre processus, vous pourriez envisager [subprocess] (https://docs.python.org/3/library/subprocess.html?highlight=subprocess#module-subprocess), puisque le mutliprocessing est une goutte en remplacement d'utiliser plusieurs cpu en évitant le GIL, en engendrant plus de processus python. – uphill