Hướng dẫn how do i fix memory errors in python? - làm cách nào để sửa lỗi bộ nhớ trong python?

Traceback (most recent call last):
File "/run-1341144766-1067082874/solution.py", line 27, in 
main()
File "/run-1341144766-1067082874/solution.py", line 11, in main
if len(s[i:j+1]) > 0:
MemoryError
Error in sys.excepthook:
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/apport_python_hook.py", line 64, in apport_excepthook
from apport.fileutils import likely_packaged, get_recent_crashes
File "/usr/lib/python2.7/dist-packages/apport/__init__.py", line 1, in 
from apport.report import Report
MemoryError

Original exception was:
Traceback (most recent call last):
File "/run-1341144766-1067082874/solution.py", line 27, in 
main()
File "/run-1341144766-1067082874/solution.py", line 11, in main
if len(s[i:j+1]) > 0:
MemoryError

Các lỗi trên đã xuất hiện khi tôi cố gắng chạy chương trình sau. Ai đó có thể giải thích lỗi bộ nhớ là gì và làm thế nào để khắc phục vấn đề này? . Chương trình lấy các chuỗi làm đầu vào và tìm thấy tất cả các chuỗi phụ có thể và tạo một tập hợp (theo thứ tự từ vựng) ra khỏi nó và nó nên in giá trị tại chỉ mục tương ứng được người dùng yêu cầu nếu không nó sẽ in 'không hợp lệ'The program takes strings as input and finds all possible sub strings and creates a set(in a lexicographical order) out of it and it should print the value at the respective index asked by the user otherwise it should print 'Invalid'

def main():
    no_str = int(raw_input())
    sub_strings= []
    for k in xrange(0,no_str):
        s = raw_input()
        a=len(s)
        for i in xrange(0, a):
            for j in xrange(0, a):
                if j >= i:
                    if len(s[i:j+1]) > 0:
                        sub_strings.append(s[i:j+1])
    sub_strings = list(set(sub_strings))
    sub_strings.sort()
    queries= int(raw_input())
    resul = []
    for i in xrange(0,queries):
        resul.append(int(raw_input()))
    for p in resul:
        try:
            print sub_strings[p-1]
        except IndexError:
            print 'INVALID'


if __name__ == "__main__":
   main()

  • Lỗi bộ nhớ là gì?
  • Các loại lỗi bộ nhớ python
  • Không mong muốn & nbsp; lỗi bộ nhớ trong python
  • Lỗi bộ nhớ Python do tập dữ liệu
  • Lỗi bộ nhớ Python do cài đặt Python không đúng
  • Lỗi bộ nhớ trong Python
  • Làm thế nào tôi có thể có bộ nhớ tự do rõ ràng trong Python?
  • Lỗi bộ nhớ trong Python khi 50+GB miễn phí và sử dụng Python 64 bit?
  • Làm thế nào để bạn đặt cách sử dụng bộ nhớ cho các chương trình Python?
  • Cách đặt giới hạn vào bộ nhớ và sử dụng CPU
  • Các cách để xử lý lỗi bộ nhớ Python và các tệp dữ liệu lớn
  • 1. Phân bổ thêm bộ nhớ
  • 2. Làm việc với một mẫu nhỏ hơn
  • 3. Sử dụng máy tính có nhiều bộ nhớ hơn
  • 4. Sử dụng cơ sở dữ liệu quan hệ
  • 5. Sử dụng một nền tảng dữ liệu lớn
  • Bản tóm tắt

Lỗi bộ nhớ là gì?

Các loại lỗi bộ nhớ pythonmemory in your RAM for your code to execute.

Không mong muốn & nbsp; lỗi bộ nhớ trong python data into memory. For large datasets, you will want to use batch processing. Instead of loading your entire dataset into memory you should keep your data in your hard drive and access it in batches.

Lỗi bộ nhớ Python do tập dữ liệumemory. This means that your program somehow creates too many objects. In your example, you have to look for parts of your algorithm that could be consuming a lot of memory.

Lỗi bộ nhớ Python do cài đặt Python không đúngmemory error.

Các loại lỗi bộ nhớ python

Không mong muốn & nbsp; lỗi bộ nhớ trong python

Nếu bạn nhận được một bất ngờ & nbsp; Python ____ 4 & nbsp; và bạn nghĩ rằng bạn nên có nhiều RAM có sẵn, đó có thể là do bạn đang sử dụng cài đặt Python 32 bit.32-bit python installation.

Giải pháp dễ dàng cho lỗi bộ nhớ Python không mong muốn for Unexpected Python Memory Error

Chương trình của bạn đang hết không gian địa chỉ ảo. Có lẽ vì bạn đã sử dụng phiên bản Python 32 bit. Vì Windows (và hầu hết các hệ điều hành khác) cũng giới hạn các ứng dụng 32 bit là 2 GB không gian địa chỉ chế độ người dùng.using a 32-bit version of Python. As Windows (and most other OSes as well) limits 32-bit applications to 2 GB of user-mode address space.

Chúng tôi Python Pooler, khuyên bạn nên cài đặt phiên bản Python 64 bit (nếu bạn có thể, tôi đã khuyên bạn nên nâng cấp lên Python 3 vì những lý do khác); Nó sẽ sử dụng nhiều bộ nhớ hơn, nhưng sau đó, nó sẽ có & nbsp; Access & nbsp; đến a & nbsp; lô & nbsp; nhiều không gian bộ nhớ hơn (và cũng có nhiều RAM vật lý hơn).64-bit version of Python (if you can, I’d recommend upgrading to Python 3 for other reasons); it will use more memory, but then, it will have access to a lot more memory space (and more physical RAM as well).

Vấn đề là Python 32 bit chỉ có quyền truy cập vào ~ 4GB RAM. Điều này có thể thu hẹp hơn nữa nếu hệ điều hành của bạn là 32 bit, vì hệ điều hành trên đầu.access to ~4GB of RAM. This can shrink even further if your operating system is 32-bit, because of the operating system overhead.

Ví dụ, trong chức năng Python 2 & nbsp; zip & nbsp; có nhiều lần lặp và trả về một trình lặp duy nhất của các bộ dữ liệu. Nhưng dù sao, chúng ta cần từng mục từ trình lặp một lần để lặp. Vì vậy, chúng tôi không cần lưu trữ tất cả các mục trong bộ nhớ trong suốt vòng lặp. Vì vậy, nó sẽ tốt hơn để sử dụng & nbsp; izip & nbsp; chỉ lấy từng mục trong các lần lặp tiếp theo. Python 3, & nbsp; zip & nbsp; các chức năng là & nbsp; izip & nbsp; theo mặc định.

Phải đọc: Python in mà không có dòng mới Python Print Without Newline

Lỗi bộ nhớ Python do tập dữ liệu

Giống như điểm, khoảng 32 bit và 64 bit đã được đề cập, một khả năng khác có thể là kích thước tập dữ liệu, nếu bạn làm việc với một bộ dữ liệu lớn. Tải một bộ dữ liệu lớn trực tiếp vào bộ nhớ và thực hiện các tính toán trên đó và lưu kết quả trung gian của các tính toán đó có thể nhanh chóng lấp đầy bộ nhớ của bạn. Các chức năng của máy phát điện rất hữu ích nếu đây là vấn đề của bạn. Nhiều thư viện Python phổ biến như Keras và Tensorflow có các chức năng và lớp cụ thể cho các trình tạo.dataset size, if you’re working with a large dataset. Loading a large dataset directly into memory and performing computations on it and saving intermediate results of those computations can quickly fill up your memory. Generator functions come in very handy if this is your problem. Many popular python libraries like Keras and TensorFlow have specific functions and classes for generators.

Lỗi bộ nhớ Python do cài đặt Python không đúng

Việc cài đặt không đúng các gói Python cũng có thể dẫn đến lỗi bộ nhớ. Thực tế là một vấn đề, trước khi giải quyết vấn đề, chúng tôi đã cài đặt trên Windows theo cách thủ công Python 2.7 và các gói mà tôi cần, sau khi làm hỏng gần hai ngày .Memory Error. As a matter of fact, before solving the problem, We had installed on windows manually python 2.7 and the packages that I needed, after messing almost two days trying to figure out what was the problem, We reinstalled everything with Conda and the problem was solved.

Chúng tôi đoán Conda đang cài đặt các gói quản lý bộ nhớ tốt hơn và đó là lý do chính. Vì vậy, bạn có thể thử cài đặt các gói Python bằng Conda, nó có thể giải quyết vấn đề lỗi bộ nhớ.

Hầu hết các nền tảng trả về một lỗi của bộ nhớ, nếu một nỗ lực phân bổ một khối bộ nhớ không thành công, nhưng nguyên nhân gốc rễ của vấn đề đó rất hiếm khi có liên quan đến việc thực sự bị loại khỏi bộ nhớ. Điều đó bởi vì, trên hầu hết các hệ điều hành hiện đại, người quản lý bộ nhớ sẽ vui vẻ sử dụng không gian đĩa cứng có sẵn của bạn làm nơi để lưu trữ các trang bộ nhớ không phù hợp với RAM; Máy tính của bạn thường có thể phân bổ bộ nhớ cho đến khi đĩa điền và nó có thể dẫn đến Python ra khỏi lỗi bộ nhớ (hoặc giới hạn hoán đổi được nhấn; trong Windows, xem Thuộc tính hệ thống> Tùy chọn hiệu suất> Nâng cao> Bộ nhớ ảo).Out of Memory error” if an attempt to allocate a block of memory fails, but the root cause of that problem very rarely has anything to do with truly being “out of memory.” That’s because, on almost every modern operating system, the memory manager will happily use your available hard disk space as place to store pages of memory that don’t fit in RAM; your computer can usually allocate memory until the disk fills up and it may lead to Python Out of Memory Error(or a swap limit is hit; in Windows, see System Properties > Performance Options > Advanced > Virtual memory).

Làm cho vấn đề tồi tệ hơn nhiều, mọi phân bổ hoạt động trong không gian địa chỉ của chương trình có thể gây ra sự phân mảnh trên mạng có thể ngăn chặn việc phân bổ trong tương lai bằng cách chia bộ nhớ có sẵn thành các khối quá nhỏ để đáp ứng phân bổ mới với & nbsp; một khối liền kề.

1.

2 & nbsp; Cho đến nay, bốn độc giả đã viết để giải thích rằng & NBSP; Nó không. Cờ này cho phép các đối tượng chiếm hơn 2GB bộ nhớ, nhưng nó không cho phép một mảng một chiều chứa nhiều hơn 2^31 mục.

Làm thế nào tôi có thể có bộ nhớ tự do rõ ràng trong Python?

Nếu bạn đã viết một chương trình Python hoạt động trên một tệp đầu vào lớn để tạo ra một vài triệu đối tượng đại diện và nó lấy hàng tấn bộ nhớ và bạn cần cách tốt nhất để nói với Python rằng bạn không còn cần một số dữ liệu và nó có thể được giải phóng ?Python program that acts on a large input file to create a few million objects representing and it’s taking tons of memory and you need the best way to tell Python that you no longer need some of the data, and it can be freed?

Câu trả lời đơn giản cho vấn đề này là:

Buộc người thu gom rác để phát hành bộ nhớ không được chấp thuận với gc.collect (). & Nbsp;unreferenced memory with gc.collect(). 

Như được hiển thị bên dưới:

Nhập GC

gc.collect()

Hướng dẫn how do i fix memory errors in python? - làm cách nào để sửa lỗi bộ nhớ trong python?

Lỗi bộ nhớ trong Python khi 50+GB miễn phí và sử dụng Python 64 bit?

Trên một số hệ điều hành, có giới hạn về số lượng RAM mà một CPU có thể xử lý. Vì vậy, ngay cả khi có đủ RAM miễn phí, một luồng duy nhất của bạn (= chạy trên một lõi) không thể mất nhiều hơn. Nhưng tôi không biết điều này có hợp lệ cho phiên bản Windows của bạn không.enough RAM free, your single thread (=running on one core) cannot take more. But I don’t know if this is valid for your Windows version, though.

Làm thế nào để bạn đặt cách sử dụng bộ nhớ cho các chương trình Python?

Python sử dụng bộ sưu tập rác và quản lý bộ nhớ tích hợp để đảm bảo chương trình chỉ sử dụng nhiều RAM theo yêu cầu. Vì vậy, trừ khi bạn viết chương trình của mình một cách rõ ràng theo cách như vậy để làm mờ sử dụng bộ nhớ, ví dụ: Tạo cơ sở dữ liệu trong RAM, Python chỉ sử dụng những gì nó cần. and built-in memory management to ensure the program only uses as much RAM as required. So unless you expressly write your program in such a way to bloat the memory usage, e.g. making a database in RAM, Python only uses what it needs.

Điều này đặt ra câu hỏi, tại sao bạn muốn sử dụng nhiều RAM hơn? Ý tưởng cho hầu hết các lập trình viên là giảm thiểu việc sử dụng tài nguyên.

Nếu bạn muốn giới hạn việc sử dụng bộ nhớ VM Python, bạn có thể thử điều này: 1 Lệnh Linux , Ulimit để giới hạn việc sử dụng bộ nhớ trên Python2 Bạn có thể sử dụng mô -đun tài nguyên để giới hạn việc sử dụng bộ nhớ chương trình;
1、Linux, ulimit command to limit the memory usage on python
2、you can use resource module to limit the program memory usage;

& nbsp; Nếu bạn muốn tăng tốc chương trình của bạn mặc dù cung cấp thêm bộ nhớ cho ứng dụng của bạn, bạn có thể thử điều này: 1 \ Threading, MultipRussing2 \ pypy3 \ pysco chỉ trên Python 2.5
1\threading, multiprocessing
2\pypy
3\pysco on only python 2.5

Cách đặt giới hạn vào bộ nhớ và sử dụng CPU

Để đặt giới hạn vào bộ nhớ hoặc sử dụng CPU của chương trình đang chạy. Để chúng tôi sẽ không phải đối mặt với bất kỳ lỗi bộ nhớ nào. Cũng để làm như vậy, & nbsp; mô -đun tài nguyên & nbsp; có thể được sử dụng và do đó cả hai tác vụ có thể được thực hiện rất tốt như được hiển thị trong mã được đưa ra dưới đây:Resource module can be used and thus both the task can be performed very well as shown in the code given below:

Mã số 1: Hạn chế thời gian CPU

# importing libraries 
import signal 
import resource 
import os 

# checking time limit exceed 
def time_exceeded(signo, frame): 
	print("Time's up !") 
	raise SystemExit(1) 

def set_max_runtime(seconds): 
	# setting up the resource limit 
	soft, hard = resource.getrlimit(resource.RLIMIT_CPU) 
	resource.setrlimit(resource.RLIMIT_CPU, (seconds, hard)) 
	signal.signal(signal.SIGXCPU, time_exceeded) 

# max run time of 15 millisecond 
if __name__ == '__main__': 
	set_max_runtime(15) 
	while True: 
		pass

Mã số 2: Để hạn chế sử dụng bộ nhớ, mã đặt giới hạn cho tổng dung lượng địa chỉ

# using resource 
import resource 

def limit_memory(maxsize): 
	soft, hard = resource.getrlimit(resource.RLIMIT_AS) 
	resource.setrlimit(resource.RLIMIT_AS, (maxsize, hard)) 

Các cách để xử lý lỗi bộ nhớ Python và các tệp dữ liệu lớn

1. Phân bổ thêm bộ nhớ

Một số công cụ hoặc thư viện Python có thể bị giới hạn bởi cấu hình bộ nhớ mặc định.

Kiểm tra xem bạn có thể cấu hình lại công cụ hoặc thư viện của mình để phân bổ nhiều bộ nhớ hơn không.

Đó là, một nền tảng được thiết kế để xử lý các bộ dữ liệu rất lớn, cho phép bạn sử dụng các biến đổi dữ liệu và thuật toán học máy trên đầu nó.

Một ví dụ điển hình là WEKA, nơi bạn có thể & NBSP; tăng bộ nhớ dưới dạng tham số & nbsp; khi bắt đầu ứng dụng.

2. Làm việc với một mẫu nhỏ hơn

Bạn có chắc là bạn cần phải làm việc với tất cả các dữ liệu?

Lấy một mẫu ngẫu nhiên dữ liệu của bạn, chẳng hạn như 1.000 hoặc 100.000 hàng đầu tiên. Sử dụng mẫu nhỏ hơn này để giải quyết vấn đề của bạn trước khi lắp mô hình cuối cùng trên tất cả dữ liệu của bạn (sử dụng các kỹ thuật tải dữ liệu tiến bộ).

Tôi nghĩ rằng đây là một thực tiễn tốt nói chung cho việc học máy để cung cấp cho bạn các kiểm tra nhanh chóng của các thuật toán và quay vòng kết quả.

Bạn cũng có thể xem xét thực hiện phân tích độ nhạy của lượng dữ liệu được sử dụng để phù hợp với một thuật toán so với kỹ năng mô hình. Có lẽ có một điểm tự nhiên về lợi nhuận giảm dần mà bạn có thể sử dụng như một kích thước heuristic của mẫu nhỏ hơn của bạn.

3. Sử dụng máy tính có nhiều bộ nhớ hơn

Bạn có phải làm việc trên máy tính của mình không?

Có lẽ bạn có thể truy cập vào một máy tính lớn hơn nhiều với thứ tự bộ nhớ lớn hơn.

Ví dụ, một tùy chọn tốt là thuê thời gian tính toán trên dịch vụ đám mây như Amazon Web Services cung cấp các máy có hàng chục gigabyte RAM với giá dưới một đô la Mỹ mỗi giờ.

4. Sử dụng cơ sở dữ liệu quan hệ

Cơ sở dữ liệu quan hệ cung cấp một cách tiêu chuẩn để lưu trữ và truy cập các bộ dữ liệu rất lớn.

Trong nội bộ, dữ liệu được lưu trữ trên đĩa có thể được tải dần theo các lô và có thể được truy vấn bằng ngôn ngữ truy vấn tiêu chuẩn (SQL).

Các công cụ cơ sở dữ liệu nguồn mở miễn phí như & nbsp; mysql & nbsp; hoặc & nbsp; postgres & nbsp; có thể được sử dụng và hầu hết (tất cả?) Ngôn ngữ lập trình và nhiều công cụ học máy có thể kết nối trực tiếp với cơ sở dữ liệu quan hệ. Bạn cũng có thể sử dụng một cách tiếp cận nhẹ, chẳng hạn như & nbsp; sqlite.

5. Sử dụng một nền tảng dữ liệu lớn

Trong một số trường hợp, bạn có thể cần phải dùng đến một nền tảng dữ liệu lớn.

Bản tóm tắt

Trong bài đăng này, bạn đã phát hiện ra một số chiến thuật và cách mà bạn có thể sử dụng khi xử lý lỗi bộ nhớ Python.

Có phương pháp khác mà bạn biết hoặc đã thử không? Chia sẻ chúng trong các ý kiến ​​dưới đây.
Share them in the comments below.

Bạn đã thử bất kỳ phương pháp nào trong số này chưa? Hãy cho tôi biết trong các ý kiến.
Let me know in the comments.

Nếu vấn đề của bạn vẫn chưa được giải quyết và bạn cần trợ giúp về lỗi bộ nhớ Python. Nhận xét xuống bên dưới, chúng tôi sẽ cố gắng giải quyết vấn đề của bạn càng sớm càng tốt.Python Memory Error. Comment Down below, We will try to solve your issue asap.

Làm thế nào để Python xử lý các vấn đề bộ nhớ?

Bạn sẽ phải gỡ lỗi sử dụng bộ nhớ trong Python bằng cách sử dụng mô -đun thu thập rác.Điều đó sẽ cung cấp cho bạn một danh sách các đối tượng được biết đến bởi các nhà sưu tập rác.Gỡ lỗi cho phép bạn xem nơi có nhiều bộ nhớ lưu trữ Python đang được áp dụng.Sau đó, bạn có thể tiếp tục và lọc mọi thứ dựa trên việc sử dụng.debug memory usage in Python using the garbage collector inbuilt module. That will provide you a list of objects known by the garbage collectors. Debugging allows you to see where much of the Python storage memory is being applied. Then, you can go ahead and filter everything based on usage.

Tại sao có lỗi bộ nhớ?

Nguyên nhân của các lỗi bộ nhớ như vậy có thể là do các yếu tố nhận thức nhất định, chẳng hạn như kích hoạt lan truyền hoặc các yếu tố sinh lý, bao gồm tổn thương não, tuổi tác hoặc các yếu tố cảm xúc.Hơn nữa, các lỗi bộ nhớ đã được báo cáo ở những người bị tâm thần phân liệt và trầm cảm.may be due to certain cognitive factors, such as spreading activation, or to physiological factors, including brain damage, age or emotional factors. Furthermore, memory errors have been reported in individuals with schizophrenia and depression.