Parelle'de iki temel yoğun işlevin nasıl çalıştırılacağını anlamak isterim. Fonksiyonlar aynı girişi gerektirir ve farklı çıkışlar üretir.Paralel olarak farklı yöntemler nasıl çalıştırılır ve daha fazla işlem için çıktılar nasıl elde edilir?
Son kez çok işlemcili kitaplığı kullandım, sonuçları bir dosyaya kaydettim ve daha fazla işleme gerek duymadım.
Aşağıda, kod türünün basit bir örneği verilmiştir. Fonksiyonlar nasıl paralelleştirilir, böylece hem a ve b çıkışları daha fazla işlem için kullanılabilir? Python 2.7 kullanıyorum.
input_dict = {'key1':'value1','key2':'value2','key3':'value3'}
def func1(dictionary):
# do some work
return np.array()
def func2(dictionary):
# do different work
return np.array()
a = func1(input_dict)
b = func2(input_dict)
result = np.dot(a, b)
Her iki işlevi birlikte çalıştırmak ve çıktılarını toplamak için kodun doğru yolun altında mı?
from multiprocessing import Process, Queue
input_dict = {'key1':'value1','key2':'value2','key3':'value3'}
def func1(dictionary):
# do some work
return q.put(np.array())
def func2(dictionary):
# do different work
return q.put(np.array())
if __name__ == '__main__':
q1 = Queue()
q2 = Queue()
p1 = Process(target=func1, args=(input_dict,))
p2 = Process(target=func2, args=(input_dict,))
p1.start()
p2.start()
a = q1.get()
b = q2.get()
p1.join()
p2.join()
result = np.dot(a, b)
bir dosya okuma parçacığı tarafından beslenen bir kuyruğu kullanın. –
2 kuyrukları kullanarak? İki çıkışı ayrı tutmak ve np.dot() kullanarak bunları birlikte işlemek istiyorum. Bir örnek verebilir misiniz? Iv'e dokümanlar okudu ve daha önce çok işlemcili kütüphaneyi kullandı ancak bu kullanım konusunda kafam karıştı. – Greg
Tamam, belki sorunuzu daha iyi ifade etmelisiniz. İlk paragrafınız "İşlevler aynı girişi gerektirir ve farklı çıktılar üretir" der. Ayrıca, ben 2 kuyruk demedim - ** bir ** sıra dedim. Bu haliyle, kodunuzu paralellik etmek için hiçbir çaba göstermediniz. Neden daha fazla ilerlemiyorsunuz ve sonra daha spesifik bir soru sormuyorsunuz? –