Hướng dẫn faster than pickle python - nhanh hơn trăn muối chua

I have created a dictionary in python and dumped into pickle. Its size went to 300MB. Now, I want to load the same pickle.

output = open('myfile.pkl', 'rb')
mydict = pickle.load(output)

Loading this pickle takes around 15 seconds. How can I reduce this time?15 seconds. How can I reduce this time?

Hardware Specification: Ubuntu 14.04, 4GB RAM

The code bellow shows how much time takes to dump or load a file using json, pickle, cPickle.

After dumping, file size would be around 300MB.

import json, pickle, cPickle
import os, timeit
import json

mydict= {all values to be added}

def dump_json():    
    output = open('myfile1.json', 'wb')
    json.dump(mydict, output)
    output.close()    

def dump_pickle():    
    output = open('myfile2.pkl', 'wb')
    pickle.dump(mydict, output,protocol=cPickle.HIGHEST_PROTOCOL)
    output.close()

def dump_cpickle():    
    output = open('myfile3.pkl', 'wb')
    cPickle.dump(mydict, output,protocol=cPickle.HIGHEST_PROTOCOL)
    output.close()

def load_json():
    output = open('myfile1.json', 'rb')
    mydict = json.load(output)
    output.close()

def load_pickle():
    output = open('myfile2.pkl', 'rb')
    mydict = pickle.load(output)
    output.close()

def load_cpickle():
    output = open('myfile3.pkl', 'rb')
    mydict = pickle.load(output)
    output.close()


if __name__ == '__main__':
    print "Json dump: "
    t = timeit.Timer(stmt="pickle_wr.dump_json()", setup="import pickle_wr")  
    print t.timeit(1),'\n'

    print "Pickle dump: "
    t = timeit.Timer(stmt="pickle_wr.dump_pickle()", setup="import pickle_wr")  
    print t.timeit(1),'\n'

    print "cPickle dump: "
    t = timeit.Timer(stmt="pickle_wr.dump_cpickle()", setup="import pickle_wr")  
    print t.timeit(1),'\n'

    print "Json load: "
    t = timeit.Timer(stmt="pickle_wr.load_json()", setup="import pickle_wr")  
    print t.timeit(1),'\n'

    print "pickle load: "
    t = timeit.Timer(stmt="pickle_wr.load_pickle()", setup="import pickle_wr")  
    print t.timeit(1),'\n'

    print "cPickle load: "
    t = timeit.Timer(stmt="pickle_wr.load_cpickle()", setup="import pickle_wr")  
    print t.timeit(1),'\n'

Output :

Json dump: 
42.5809804916 

Pickle dump: 
52.87407804489 

cPickle dump: 
1.1903790187836 

Json load: 
12.240660209656 

pickle load: 
24.48748306274 

cPickle load: 
24.4888298893

I have seen that cPickle takes less time to dump and load but loading a file still takes a long time. loading a file still takes a long time.

Pickle, là một phần của thư viện Python theo mặc định, là một mô-đun quan trọng bất cứ khi nào bạn cần sự kiên trì giữa các phiên người dùng. Là một mô-đun, pickle cung cấp cho việc lưu các đối tượng Python giữa các tiến trình.

Cho dù bạn đang lập trình cho một cơ sở dữ liệu , trò chơi, diễn đàn hay một số ứng dụng khác phải lưu thông tin giữa các phiên, thì dưa chuột rất hữu ích để lưu số nhận dạng và cài đặt. Mô-đun dưa có thể lưu trữ những thứ như các loại dữ liệu như boolean, chuỗi và mảng byte, danh sách, từ điển, hàm và nhiều thứ khác.

Lưu ý: Khái niệm về tẩy cũng được gọi là serialization, marshaling, và làm phẳng. Tuy nhiên, điểm luôn giống nhau — để lưu một đối tượng vào một tệp để truy xuất sau này. Pickling hoàn thành điều này bằng cách viết đối tượng dưới dạng một luồng dài các byte. Khái niệm về tẩy cũng được gọi là serialization, marshaling, và làm phẳng. Tuy nhiên, điểm luôn giống nhau — để lưu một đối tượng vào một tệp để truy xuất sau này. Pickling hoàn thành điều này bằng cách viết đối tượng dưới dạng một luồng dài các byte.

Mã ví dụ Pickle bằng Python

Để viết một đối tượng vào một tệp, bạn sử dụng mã theo cú pháp sau:

đối tượng pickle nhập khẩu = Object () filehandler = open (tên tập tin, 'w') pickle.dump (đối tượng, filehandler)

Đây là một ví dụ trong thế giới thực trông như thế nào:

nhập khẩu pickle nhập khẩu math object_pi = math.pi file_pi = mở ('filename_pi.obj', 'w') pickle.dump (object_pi, file_pi)

Đoạn mã này ghi nội dung của object_pi vào tệp tin handler file_pi , do đó nó được gắn với tệp filename_pi.obj trong thư mục thực hiện.

Để khôi phục giá trị của đối tượng vào bộ nhớ, hãy tải đối tượng từ tệp. Giả sử rằng dưa chưa được nhập để sử dụng, hãy bắt đầu bằng cách nhập nó:

importle filehandler = open (tên tập tin, 'r') object = pickle.load (filehandler)

Mã sau khôi phục giá trị của pi:

importle file_pi2 = open ('filename_pi.obj', 'r') object_pi2 = pickle.load (file_pi2)

Đối tượng sau đó đã sẵn sàng để sử dụng một lần nữa, lần này là object_pi2 . Bạn có thể, tất nhiên, tái sử dụng tên ban đầu, nếu bạn thích.

Ví dụ này sử dụng tên riêng biệt để rõ ràng.

Những điều cần nhớ về Pickle

Hãy ghi nhớ những điều này khi sử dụng mô-đun dưa chuột:

  • Giao thức pickle dành riêng cho Python - nó không được đảm bảo tương thích với ngôn ngữ chéo. Bạn hầu như không thể chuyển thông tin để làm cho thông tin hữu ích trong Perl, PHP, Java hoặc các ngôn ngữ khác.
  • Cũng không có sự đảm bảo về tính tương thích giữa các phiên bản Python khác nhau. IThe không tương thích tồn tại vì không phải mọi cấu trúc dữ liệu Python đều có thể được tuần tự hóa bởi mô-đun.
  • Theo mặc định, phiên bản mới nhất của giao thức dưa được sử dụng. Nó vẫn như vậy trừ khi bạn tự thay đổi nó.

Mẹo: Cũng tìm hiểu cách sử dụng giá đỡ để lưu các đối tượng trong Python cho một phương pháp duy trì tính liên tục đối tượng khác. Cũng tìm hiểu cách sử dụng giá đỡ để lưu các đối tượng trong Python cho một phương pháp duy trì tính liên tục đối tượng khác.

Pickle, là một phần của thư viện Python theo mặc định, là một mô-đun quan trọng bất cứ khi nào bạn cần sự bền bỉ giữa các phiên người dùng. Là một mô-đun, pickle cung cấp khả năng lưu các đối tượng Python giữa các quy trình. Là một mô-đun, pickle cung cấp khả năng lưu các đối tượng Python giữa các quy trình.

Cho dù bạn đang lập trình cho cơ sở dữ liệu , trò chơi, diễn đàn hoặc một số ứng dụng khác phải lưu thông tin giữa các phiên, pickle rất hữu ích để lưu số nhận dạng và cài đặt. Mô-đun pickle có thể lưu trữ những thứ như kiểu dữ liệu như boolean, chuỗi và mảng byte, danh sách, từ điển, hàm, v.v.cơ sở dữ liệu , trò chơi, diễn đàn hoặc một số ứng dụng khác phải lưu thông tin giữa các phiên, pickle rất hữu ích để lưu số nhận dạng và cài đặt. Mô-đun pickle có thể lưu trữ những thứ như kiểu dữ liệu như boolean, chuỗi và mảng byte, danh sách, từ điển, hàm, v.v.

Lưu ý:  Khái niệm tẩy rửa còn được gọi là nối tiếp, sắp xếp và làm phẳng. Tuy nhiên, điểm luôn giống nhau — lưu một đối tượng vào tệp để truy xuất sau này. Pickling hoàn thành điều này bằng cách ghi đối tượng dưới dạng một dòng byte dài.   Khái niệm tẩy rửa còn được gọi là nối tiếp, sắp xếp và làm phẳng. Tuy nhiên, điểm luôn giống nhau — lưu một đối tượng vào tệp để truy xuất sau này. Pickling hoàn thành điều này bằng cách ghi đối tượng dưới dạng một dòng byte dài. 

Mã ví dụ về dưa chua bằng Python

Để ghi một đối tượng vào tệp, bạn sử dụng mã theo cú pháp sau:

import pickle 
object = Object ()
filehandler = open (filename, 'w')
pickle.dump (object, filehandler)

Đây là cách một ví dụ trong thế giới thực trông như thế nào:

import pickle 
import math
object_pi = math.pi
file_pi = open ('filename_pi.obj', 'w')
pickle.dump (object_pi, file_pi)

Đoạn mã này ghi nội dung của object_pi vào file_pi của trình xử lý tệp , đến lượt nó được liên kết với tệp filename_pi.obj trong thư mục thực thi. object_pi vào file_pi của trình xử lý tệp , đến lượt nó được liên kết với tệp filename_pi.obj trong thư mục thực thi.

Để khôi phục giá trị của đối tượng vào bộ nhớ, hãy tải đối tượng từ tệp. Giả sử rằng dưa chua chưa được nhập để sử dụng, hãy bắt đầu bằng cách nhập nó: Giả sử rằng dưa chua chưa được nhập để sử dụng, hãy bắt đầu bằng cách nhập nó:

import pickle 
filehandler = open (filename, 'r')
object = pickle.load (filehandler)

Đoạn mã sau khôi phục giá trị của số pi:

import pickle 
file_pi2 = open ('filename_pi.obj', 'r')
object_pi2 = pickle.load (file_pi2)

Đối tượng sau đó đã sẵn sàng để sử dụng một lần nữa, lần này là object_pi2 . Tất nhiên, bạn có thể sử dụng lại các tên ban đầu, nếu bạn thích. Ví dụ này sử dụng các tên riêng biệt để rõ ràng. object_pi2 . Tất nhiên, bạn có thể sử dụng lại các tên ban đầu, nếu bạn thích. Ví dụ này sử dụng các tên riêng biệt để rõ ràng.

Những điều cần nhớ về dưa chua

Hãy ghi nhớ những điều này khi sử dụng mô-đun dưa chua:

  • Giao thức pickle dành riêng cho Python - nó không được đảm bảo là tương thích với nhiều ngôn ngữ. Rất có thể bạn không thể chuyển thông tin để làm cho nó hữu ích bằng Perl, PHP, Java hoặc các ngôn ngữ khác.Rất có thể bạn không thể chuyển thông tin để làm cho nó hữu ích bằng Perl, PHP, Java hoặc các ngôn ngữ khác.
  • Cũng không có gì đảm bảo về khả năng tương thích giữa các phiên bản Python khác nhau. Sự không tương thích tồn tại bởi vì không phải mọi cấu trúc dữ liệu Python đều có thể được tuần tự hóa bởi mô-đun.Sự không tương thích tồn tại bởi vì không phải mọi cấu trúc dữ liệu Python đều có thể được tuần tự hóa bởi mô-đun.
  • Theo mặc định, phiên bản mới nhất của giao thức dưa chua được sử dụng. Nó vẫn như vậy trừ khi bạn thay đổi nó theo cách thủ công.Nó vẫn như vậy trừ khi bạn thay đổi nó theo cách thủ công.

Mẹo:  Ngoài ra, hãy tìm hiểu  cách sử dụng giá đỡ để lưu các đối tượng trong Python  cho một phương pháp khác để duy trì tính liên tục của đối tượng.  Ngoài ra, hãy tìm hiểu  cách sử dụng giá đỡ để lưu các đối tượng trong Python  cho một phương pháp khác để duy trì tính liên tục của đối tượng.