Hướng dẫn limit memory python - giới hạn bộ nhớ python

Tôi đang cố giới hạn việc sử dụng RAM từ chương trình Python xuống một nửa để nó không hoàn toàn đóng băng khi tất cả RAM được sử dụng, vì điều này tôi sử dụng mã sau không hoạt động và máy tính xách tay của tôi vẫn bị đóng băng:

import sys
import resource

def memory_limit():
    rsrc = resource.RLIMIT_DATA
    soft, hard = resource.getrlimit(rsrc)
    soft /= 2
    resource.setrlimit(rsrc, (soft, hard))

if __name__ == '__main__':
    memory_limit() # Limitates maximun memory usage to half
    try:
        main()
    except MemoryError:
        sys.stderr.write('MAXIMUM MEMORY EXCEEDED')
        sys.exit(-1)

Tôi đang sử dụng các chức năng khác mà tôi gọi từ hàm main.

Tôi đang làm gì sai?

Cảm ơn trước.

PD: Tôi đã tìm kiếm về điều này và tìm thấy mã tôi đã đặt nhưng nó vẫn không hoạt động ...

Hướng dẫn limit memory python - giới hạn bộ nhớ python

Hỏi ngày 12 tháng 12 năm 2016 lúc 16:56Dec 12, 2016 at 16:56

Hướng dẫn limit memory python - giới hạn bộ nhớ python

5

Tôi đã thực hiện một số nghiên cứu và tìm thấy một chức năng để lấy bộ nhớ từ các hệ thống Linux tại đây: Xác định RAM miễn phí trong Python và tôi đã sửa đổi nó một chút để có sẵn bộ nhớ miễn phí và đặt bộ nhớ tối đa có sẵn dưới dạng một nửa.

Code:

import resource
import sys

def memory_limit():
    soft, hard = resource.getrlimit(resource.RLIMIT_AS)
    resource.setrlimit(resource.RLIMIT_AS, (get_memory() * 1024 / 2, hard))

def get_memory():
    with open('/proc/meminfo', 'r') as mem:
        free_memory = 0
        for i in mem:
            sline = i.split()
            if str(sline[0]) in ('MemFree:', 'Buffers:', 'Cached:'):
                free_memory += int(sline[1])
    return free_memory

if __name__ == '__main__':
    memory_limit() # Limitates maximun memory usage to half
    try:
        main()
    except MemoryError:
        sys.stderr.write('\n\nERROR: Memory Exception\n')
        sys.exit(1)

Dòng để đặt nó thành một nửa là resource.setrlimit(resource.RLIMIT_AS, (get_memory() * 1024 / 2, hard)) trong đó get_memory() * 1024 / 2 đặt nó thành một nửa (nó ở trong byte).

Hướng dẫn limit memory python - giới hạn bộ nhớ python

PPPERY

3.61320 Huy hiệu vàng30 Huy hiệu bạc43 Huy hiệu Đồng20 gold badges30 silver badges43 bronze badges

Đã trả lời ngày 13 tháng 12 năm 2016 lúc 16:03Dec 13, 2016 at 16:03

Hướng dẫn limit memory python - giới hạn bộ nhớ python

Ulise ctulise ctUlises CT

1.1711 huy hiệu vàng11 Huy hiệu bạc21 Huy hiệu đồng1 gold badge11 silver badges21 bronze badges

Tôi sửa đổi câu trả lời của @ulise CT. Bởi vì tôi nghĩ để thay đổi quá nhiều chức năng ban đầu không tốt, vì vậy tôi biến nó thành một người trang trí. Tôi hy vọng nó sẽ giúp.

import resource
import platform
import sys

def memory_limit(percentage: float):
    """
    只在linux操作系统起作用
    """
    if platform.system() != "Linux":
        print('Only works on linux!')
        return
    soft, hard = resource.getrlimit(resource.RLIMIT_AS)
    resource.setrlimit(resource.RLIMIT_AS, (get_memory() * 1024 * percentage, hard))

def get_memory():
    with open('/proc/meminfo', 'r') as mem:
        free_memory = 0
        for i in mem:
            sline = i.split()
            if str(sline[0]) in ('MemFree:', 'Buffers:', 'Cached:'):
                free_memory += int(sline[1])
    return free_memory

def memory(percentage=0.8):
    def decorator(function):
        def wrapper(*args, **kwargs):
            memory_limit(percentage)
            try:
                return function(*args, **kwargs)
            except MemoryError:
                mem = get_memory() / 1024 /1024
                print('Remain: %.2f GB' % mem)
                sys.stderr.write('\n\nERROR: Memory Exception\n')
                sys.exit(1)
        return wrapper
    return decorator

@memory(percentage=0.8)
def main():
    print('My memory is limited to 80%.')

Hướng dẫn limit memory python - giới hạn bộ nhớ python

Fbruzzesi

6.0403 Huy hiệu vàng14 Huy hiệu bạc36 Huy hiệu đồng3 gold badges14 silver badges36 bronze badges

Đã trả lời ngày 10 tháng 10 năm 2019 lúc 3:17Oct 10, 2019 at 3:17

Qiuyuanqiuyuanqiuyuan

Huy hiệu đồng 1491 Bạc4 Huy hiệu đồng1 silver badge4 bronze badges

2