उदाहरण के लिए:

from multiprocessing import Pool
from functools import partial

numbers = []
for i in range(100):
    numbers.append(i)

def add_one(number, new_numbers):
    new = number + 1
    new_numbers.append(new)

new_numbers = []
process_pool = Pool(2)
add_one_helper = partial(add_one, new_numbers=new_numbers)

process_pool.map(add_one_helper, numbers)

print(new_numbers)

मुझे लगता है कि new_numbers प्रिंट होगा: 1, 2, 3, 4..., लेकिन यह प्रिंट() में खाली है। कॉल के बाद नए_नंबरों को कैसे पॉप्युलेट किया जाए?

-2
marlon 4 अक्टूबर 2021, 11:15
शायद शामिल होने की जरूरत है या कुछ और
 – 
user202729
4 अक्टूबर 2021, 11:17
अगर मैं process_pool.join() जोड़ता हूं, तो यह त्रुटि होगी: 'ValueError: पूल अभी भी चल रहा है'
 – 
marlon
4 अक्टूबर 2021, 11:22
1
किसी भी तरह से Pool.map का उपयोग करने का यह पूरी तरह से गलत तरीका है। आप इसे सामान्य तरीके से क्यों नहीं कर सकते?
 – 
user202729
4 अक्टूबर 2021, 11:34
यह उत्तर काम नहीं करता है: समानांतर प्रक्रियाएं"> stackoverflow.com/questions/11025005/…, लेखन त्रुटि: f () 1 आवश्यक स्थितिगत तर्क गुम है: 'x'
 – 
marlon
4 अक्टूबर 2021, 11:34

1 उत्तर

सबसे बढ़िया उत्तर

पहले एक अवलोकन। आपके पास:

numbers = []
for i in range(100):
    numbers.append(i)

यह 0, 1, 2 ... 99 मानों वाली सूची बनाने के लिए लूप का उपयोग कर रहा है। लेकिन आप उतनी ही आसानी से और अधिक कुशलता से निर्दिष्ट कर सकते हैं:

numbers = list(range(100))

लेकिन वास्तव में पुनरावर्तनीय तर्क को Pool.map पद्धति में पारित किया जा रहा है, एक सूची होने की आवश्यकता नहीं है (हालांकि, यह स्वचालित रूप से एक सूची में परिवर्तित हो जाएगा यदि यह __len__ पद्धति का समर्थन नहीं करता)। तो नंबर सूची बनाने के बजाय, आप श्रेणी(100) के बजाय map< के पुनरावर्तनीय तर्क के रूप में बस पास कर सकते थे। / कोड> कॉल। अब हाथ में प्रश्न पर:

Pool.map विधि कार्यकर्ता फ़ंक्शन (add_one इस मामले में) को कॉल करने से सभी रिटर्न मानों की एक सूची देता है। तो आपको केवल add_one वापसी की आवश्यकता है जो वह नई सूची में जोड़ना चाहता है:

from multiprocessing import Pool

def add_one(number):
    return number + 1

process_pool = Pool(2)
new_numbers = process_pool.map(add_one, range(100))
print(new_numbers)

प्रिंट:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]
0
Booboo 4 अक्टूबर 2021, 15:42