अब तक जब भी मुझे multiprocessing
का उपयोग करने की आवश्यकता है, मैंने मैन्युअल रूप से "प्रक्रिया पूल" बनाकर और सभी सबप्रोसेसेस के साथ एक कार्यशील कतार साझा करके ऐसा किया है।पाइथन मल्टीप्रोसेसिंग पूल द्वारा किए जाने वाले "काम" की मात्रा कैसे प्राप्त करें?
उदाहरण के लिए:
from multiprocessing import Process, Queue
class MyClass:
def __init__(self, num_processes):
self._log = logging.getLogger()
self.process_list = []
self.work_queue = Queue()
for i in range(num_processes):
p_name = 'CPU_%02d' % (i+1)
self._log.info('Initializing process %s', p_name)
p = Process(target = do_stuff,
args = (self.work_queue, 'arg1'),
name = p_name)
इस तरह से मैं कतार है, जो subprocesses से भस्म किया जाएगा करने के लिए सामान जोड़ सकते हैं। मैं तो की निगरानी कर सकता है कितनी दूर प्रसंस्करण Queue.qsize()
की जाँच करके किया गया था:
while True:
qsize = self.work_queue.qsize()
if qsize == 0:
self._log.info('Processing finished')
break
else:
self._log.info('%d simulations still need to be calculated', qsize)
अब मैं समझ multiprocessing.Pool
एक बहुत इस कोड को आसान बनाने में कर सकते हैं।
मुझे क्या पता नहीं चला कि मैं अभी भी "काम" की मात्रा की निगरानी कैसे कर सकता हूं।
from multiprocessing import Pool
class MyClass:
def __init__(self, num_processes):
self.process_pool = Pool(num_processes)
# ...
result_list = []
for i in range(1000):
result = self.process_pool.apply_async(do_stuff, ('arg1',))
result_list.append(result)
# ---> here: how do I monitor the Pool's processing progress?
# ...?
कोई भी विचार:
निम्नलिखित उदाहरण लें?