Khi tôi chạy mã bên dưới, bộ nhớ ngày càng tăng. Tuy nhiên, nếu tôi đã xóa time.sleep(3)
, thì đó là 0.1
trong top
và không bao giờ tăng lên.Python - tại sao time.sleep lại gây ra rò rỉ bộ nhớ?
Có vẻ như process
không bị chấm dứt chính xác, nhưng tại sao?
Mã (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 tài liệu chính thức cho biết 'Người ta phải gọi close() hoặc chấm dứt() trước khi sử dụng join() 'https://docs.python.org/2/library/multiprocessing.html#multiprocessing.pool.multiprocessing. Pool.join – tanglong
Câu hỏi sau có thể thú vị cho bạn: http: //stackoverflow.com/questions/7648967/python-multiprocessing-how-to-release-memory-when-a-process-is-done Kiểm tra câu trả lời bằng cách user1914881: "Hãy thử thiết lập đối số maxtasksperchild trên hồ bơi. Nếu không, thì quá trình này được lặp lại nhiều lần bởi hồ bơi để bộ nhớ không bao giờ được giải phóng. Khi được đặt, quá trình sẽ được phép chết và một cái được tạo ra ở chỗ của nó. Điều đó sẽ làm sạch bộ nhớ một cách hiệu quả. " Các quy trình dường như chứa một chút bộ nhớ không bao giờ được phát hành trong vòng lặp 1 của bạn. (Mặc dù tôi không chắc chắn) –
@RobinSpiess Tôi đã cố gắng 'maxtasksperchild', nhưng không giúp đỡ – tanglong