Когда я использую многопроцессорность для запуска двух функций, я могу получить результат, что они выполняются параллельно. Но теперь я хочу, чтобы два подпроцесса связывались друг с другом, поэтому я ввел метод Pipe (), после чего я обнаружил, что эти две функции не выполняются параллельно
(проект, который я прикрепил, стоит 2 с, а не 1 с ... если я удалю все методы pipe (), он будет стоить только 1 с, что означает, что две функции работают параллельно).
Интересно, что не так с моим кодом ... что-то не так, когда я использую join () или recv () ??
Одним словом, я хочу знать, как заставить две функции работать параллельно, когда я использую Pipe () для связи между ними? Большое спасибо!
import numpy as np
import multiprocessing
import time
def funca(mylist,conn):
time.sleep(1)
mylist.append(666.6)
conn.send(['a','a','a'])
def funcb(mylist,conn):
time.sleep(1)
mylist.append(66.6)
conn.send(['b','b','b'])
if __name__ == "__main__":
samples = [1,2,3]
with multiprocessing.Manager() as MG:
conn1,conn2 = multiprocessing.Pipe()
mylist = MG.list(samples)
tic = time.time()
p1=multiprocessing.Process(target=funca,args=(mylist,conn1) )
p1.start()
print(conn2.recv())
funcb(mylist,conn1)
# p2=multiprocessing.Process(target=funcb,args=(mylist,conn1) )
# p2.start()
print(conn2.recv())
p1.join()
# p2.join()
p1.terminate()
# p2.terminate()
print(list(mylist))
toc = time.time()
print('pass time = ',toc-tic)