मैं अजगर 2.7 का उपयोग कर रहा हूं, और कुछ सीपीयू भारी कार्यों को अपनी प्रक्रियाओं में चलाने की कोशिश कर रहा हूं। मैं प्रक्रिया की वर्तमान स्थिति के बारे में सूचित रखने के लिए अभिभावक प्रक्रिया में संदेशों को वापस भेजने में सक्षम होना चाहता हूं। मल्टीप्रोसेसिंग कतार इस के लिए बिल्कुल सही लगता है लेकिन मैं यह नहीं समझ सकता कि इसे कैसे प्राप्त किया जाए।क्या मैं Pool.imap नामक फ़ंक्शन में एक मल्टीप्रोसेसिंग कतार का उपयोग कर सकता हूं?
तो, यह मेरा मूल कार्य उदाहरण है जो एक कतार के उपयोग से कम है।
import multiprocessing as mp
import time
def f(x):
return x*x
def main():
pool = mp.Pool()
results = pool.imap_unordered(f, range(1, 6))
time.sleep(1)
print str(results.next())
pool.close()
pool.join()
if __name__ == '__main__':
main()
मैं कई मायनों में कतार गुजर की कोशिश की है, और वे त्रुटि संदेश मिलता है "RuntimeError: कतार वस्तुओं केवल विरासत के माध्यम से प्रक्रियाओं के बीच साझा किया जाना चाहिए"। मैंने पाया कि पहले के उत्तर के आधार पर मैंने कोशिश की है। (मैं एक ही Pool.map_async और Pool.imap का उपयोग करने की कोशिश कर समस्या मिल)
import multiprocessing as mp
import time
def f(args):
x = args[0]
q = args[1]
q.put(str(x))
time.sleep(0.1)
return x*x
def main():
q = mp.Queue()
pool = mp.Pool()
results = pool.imap_unordered(f, ([i, q] for i in range(1, 6)))
print str(q.get())
pool.close()
pool.join()
if __name__ == '__main__':
main()
अंत में, 0 फिटनेस दृष्टिकोण (यह वैश्विक बनाने के) कोई संदेश उत्पन्न नहीं करता है, यह सिर्फ अप अवरोधित करता है।
import multiprocessing as mp
import time
q = mp.Queue()
def f(x):
q.put(str(x))
return x*x
def main():
pool = mp.Pool()
results = pool.imap_unordered(f, range(1, 6))
time.sleep(1)
print q.get()
pool.close()
pool.join()
if __name__ == '__main__':
main()
मुझे पता है कि यह शायद multiprocessing.Process सीधे के साथ और कहा कि अन्य पुस्तकालयों यह पूरा करने के देखते हैं काम करेंगे हूँ, लेकिन मैं मानक पुस्तकालय कार्यों कि एक महान फिट हैं जब तक मैं से दूर वापस करने के लिए नफरत मुझे यकीन है कि यह सिर्फ मुझे ज्ञान का अभाव नहीं है बल्कि मुझे उनका शोषण करने में सक्षम होने से रोकता है।
धन्यवाद।
क्या आपने जग का उपयोग करने पर विचार किया है: http://luispedro.org/software/jug? – luispedro