जब मैंने नीचे दिया गया कोड चलाया, तो स्मृति बढ़ रही थी। हालांकि अगर मैंने time.sleep(3)
हटा दिया, तो top
में और कभी भी वृद्धि नहीं हुई।पायथन - टाइम.sleep कारण स्मृति रिसाव क्यों करता है?
ऐसा लगता है कि process
सही ढंग से समाप्त नहीं किया जा सकता है, लेकिन क्यों?
संहिता (Python 2.7.11
):
import time
import multiprocessing
def process():
#: FIXME
time.sleep(3)
return
def main():
pool = multiprocessing.Pool(processes=10)
while 1:
pool.apply_async(process)
pool.close()
pool.join()
if __name__ == '__main__':
main()
@vks आधिकारिक दस्तावेज़ ने कहा कि 'किसी को शामिल() 'https://docs.python.org/2/library/multiprocessing.html#multiprocessing.pool.multiprocessing का उपयोग करने से पहले बंद() या समाप्त() को कॉल करना होगा। Pool.join – tanglong
निम्नलिखित प्रश्न आपके लिए दिलचस्प हो सकता है: http: //stackoverflow.com/questions/7648967/python-multiprocessing-how-to-release-memory-when-a-process-is-done द्वारा उत्तर की जांच करें उपयोगकर्ता 1 9 14881: "पूल पर maxtasksperchild तर्क सेट करने का प्रयास करें। यदि आप नहीं करते हैं, तो पूल को फिर से बार-बार पुन: उपयोग किया जाता है ताकि स्मृति कभी जारी न हो। सेट होने पर, प्रक्रिया को मरने की अनुमति दी जाएगी और एक नया एक व्यक्ति की जगह में बनाया गया है। यह प्रभावी ढंग से स्मृति को साफ करेगा। " प्रक्रियाओं में थोड़ी सी मेमोरी होती है जो आपके लूप में कभी भी रिलीज़ नहीं होती है। (हालांकि मुझे यकीन नहीं है) –
@RobinSpiess मैंने 'maxtasksperchild' की कोशिश की, लेकिन – tanglong