देता है मैं मानता हूँ कि Pool
का उपयोग कर यदि आप मानक पुस्तकालय में रहना चाहते हैं तो multiprocessing
से शायद सबसे अच्छा मार्ग है। यदि आप अन्य प्रकार के समांतर प्रसंस्करण करने में रुचि रखते हैं, लेकिन कुछ भी नया नहीं सीख रहे हैं (यानी अभी भी multiprocessing
के समान इंटरफ़ेस का उपयोग कर रहे हैं), तो आप pathos
को आजमा सकते हैं, जो समानांतर मानचित्रों के कई रूप प्रदान करता है और multiprocessing
के समान इंटरफ़ेस कर देता है।
Python 2.7.6 (default, Nov 12 2013, 13:26:39)
[GCC 4.2.1 Compatible Apple Clang 4.1 ((tags/Apple/clang-421.11.66))] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
>>> numToFactor = 976
>>> def isFactor(x):
... result = None
... div = (numToFactor/x)
... if div*x == numToFactor:
... result = (x,div)
... return result
...
>>> from pathos.multiprocessing import ProcessingPool as MPool
>>> p = MPool(4)
>>> possible = range(1,int(numpy.floor(numpy.sqrt(numToFactor)))+1)
>>> # standard blocking map
>>> result = [x for x in p.map(isFactor, possible) if x is not None]
>>> print result
[(1, 976), (2, 488), (4, 244), (8, 122), (16, 61)]
>>>
>>> # asynchronous map (there's also iterative maps too)
>>> obj = p.amap(isFactor, possible)
>>> obj
<processing.pool.MapResult object at 0x108efc450>
>>> print [x for x in obj.get() if x is not None]
[(1, 976), (2, 488), (4, 244), (8, 122), (16, 61)]
>>>
>>> # there's also parallel-python maps (blocking, iterative, and async)
>>> from pathos.pp import ParallelPythonPool as PPool
>>> q = PPool(4)
>>> result = [x for x in q.map(isFactor, possible) if x is not None]
>>> print result
[(1, 976), (2, 488), (4, 244), (8, 122), (16, 61)]
इसके अलावा, pathos
एक ही इंटरफ़ेस के साथ एक बहन पैकेज, pyina
कहा जाता है, जो mpi4py
चलाता है, लेकिन समानांतर नक्शे कि एमपीआई में चलाने के लिए और कई शेड्यूलर का उपयोग कर चलाया जा सकता है के साथ प्रदान करता है।
एक अन्य लाभ यह है कि pathos
मानक पायथन में प्राप्त करने के मुकाबले एक बेहतर सीरिएलाइज़र के साथ आता है, इसलिए यह multiprocessing
से अधिक कार्यों और अन्य चीजों को क्रमबद्ध करने में अधिक सक्षम है। और आप दुभाषिया से सब कुछ कर सकते हैं।
>>> class Foo(object):
... b = 1
... def factory(self, a):
... def _square(x):
... return a*x**2 + self.b
... return _square
...
>>> f = Foo()
>>> f.b = 100
>>> g = f.factory(-1)
>>> p.map(g, range(10))
[100, 99, 96, 91, 84, 75, 64, 51, 36, 19]
>>>
यहाँ कोड प्राप्त करें: https://github.com/uqfoundation
यहाँ एक और तरीका, मैं यहाँ से समझा दिया है: - [न्यूनतम सक्रिय थ्रेडेड प्रक्रियाओं] [1] [1]: http://stackoverflow.com/a/32337959/4850220 –