Cprofile ví dụ python

Ngày nay, chương trình của chúng ta ngày càng phức tạp hơn về cả cấp độ kinh doanh và mã hóa, có thể chứa hàng nghìn dòng mã. Tìm ra lý do tại sao chương trình bị chậm bằng cách xem mã nguồn của nó là một công việc tốn thời gian và không dễ thực hiện

Hơn nữa, khi chương trình chạy trên dịch vụ đám mây sẽ tốn nhiều tiền hơn nếu chương trình sử dụng nhiều tài nguyên máy tính hơn

Đó là lý do tại sao code profiler có vai trò thiết yếu để tìm ra các nút cổ chai và giúp tối ưu hóa hiệu suất chương trình của chúng tôi

Gần đây, có một số cách để cấu hình mã, tuy nhiên trong bài đăng này, chúng tôi sẽ tập trung vào một phương pháp cơ bản bằng cách sử dụng trình cấu hình tích hợp trong Python, đó là CProfile

Làm cách nào để sử dụng Python cProfile?

cProfile là một mô-đun python tích hợp và là trình cấu hình được sử dụng phổ biến nhất hiện nay, sử dụng nó chúng ta có thể

  • Lấy tổng thời gian chạy của toàn bộ mã
  • Hiển thị thời gian thực hiện của từng bước riêng lẻ, cho phép so sánh và tìm phần nào cần tối ưu hóa
  • Hiểu số lần các hàm nhất định được gọi
  • Xem số liệu thống kê độc đáo bằng thư viện khác, chẳng hạn như
    import random
    
    def sort_letters[number_letters=10**6]:
        random_string = ''
        for i in range[number_letters]:
            random_string += random.choice['abcdefghijklmnopqrstuvwxyz']
        return sorted[random_string]
    
    3

Hãy xem ví dụ đơn giản đầu tiên

> import cProfile
> cProfile.run["sorted[[1, 2, 3]]"]
         4 function calls in 0.000 seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno[function]
        1    0.000    0.000    0.000    0.000 :1[]
        1    0.000    0.000    0.000    0.000 {built-in method builtins.exec}
        1    0.000    0.000    0.000    0.000 {built-in method builtins.sorted}
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}
  • ncalls là số cuộc gọi được thực hiện
  • tottime là tổng thời gian dành cho hàm đã cho
  • percall đề cập đến thương số của tottime chia cho ncalls
  • cumtime là thời gian tích lũy dành cho chức năng này và tất cả các chức năng con
  • tên tập tin. lineno[function] cung cấp dữ liệu tương ứng của từng chức năng

Ví dụ không có nút cổ chai, hãy xem ví dụ thú vị hơn bên dưới

import random

def sort_letters[number_letters=10**6]:
    random_string = ''
    for i in range[number_letters]:
        random_string += random.choice['abcdefghijklmnopqrstuvwxyz']
    return sorted[random_string]

Chúng ta cũng có thể gọi cProfile trên dòng lệnh

> python -m cProfile profile_test.py
         3000053 function calls in 1.041 seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno[function]
        1    0.000    0.000    0.000    0.000 __future__.py:48[]
        1    0.000    0.000    0.000    0.000 __future__.py:74[_Feature]
        7    0.000    0.000    0.000    0.000 __future__.py:75[__init__]
        6    0.000    0.000    0.000    0.000 hashlib.py:100[__get_openssl_constructor]
        1    0.001    0.001    0.001    0.001 hashlib.py:56[]
        1    0.003    0.003    1.041    1.041 profile_test.py:1[]
        1    0.289    0.289    1.034    1.034 profile_test.py:3[sort_letters]
        1    0.000    0.000    0.001    0.001 random.py:100[seed]
  1000000    0.455    0.000    0.562    0.000 random.py:275[choice]
        1    0.002    0.002    0.004    0.004 random.py:40[]
...

Bằng cách nhìn vào đầu ra, có vẻ như chức năng lựa chọn từ mô-đun ngẫu nhiên mất rất nhiều thời gian, chúng ta có thể bắt đầu tối ưu hóa nó từ mã này

Làm cách nào để trực quan hóa các báo cáo cProfile?

Công cụ phổ biến để trực quan hóa dữ liệu thu được từ mô-đun cProfile là

import random

def sort_letters[number_letters=10**6]:
    random_string = ''
    for i in range[number_letters]:
        random_string += random.choice['abcdefghijklmnopqrstuvwxyz']
    return sorted[random_string]
4, hãy khám phá cách sử dụng nó

Đầu tiên, chúng ta có thể xuất đầu ra của cProfile vào tệp kết xuất

python -m cProfile -o stats.dump profile_test.py

Bước tiếp theo

snakeviz stats.dump

Bắt đầu tối ưu hóa mã trước đó

Từ ví dụ trước, chúng ta biết rằng hàm

import random

def sort_letters[number_letters=10**6]:
    random_string = ''
    for i in range[number_letters]:
        random_string += random.choice['abcdefghijklmnopqrstuvwxyz']
    return sorted[random_string]
5 đang làm chúng ta chậm lại, đã đến lúc thay thế nó bằng một hàm tương tự khác

from numpy import random

def sort_letters[number_letters=10**6]:
    letters = tuple['abcdefghijklmnopqrstuvwxyz']
    random_letters = random.choice[letters, number_letters]
    random_letters.sort[]
    return random_letters.tostring[]

Bây giờ chương trình của chúng tôi chạy nhanh hơn nhiều so với trước đây

Phần kết luận

Ngoài cProfile, còn có một số mô-đun python khác để hỗ trợ mã định hình, nhưng cProfile bao gồm hầu hết các tính năng của nó và được khuyến nghị sử dụng. Hãy theo dõi chủ đề tương tự, ví dụ như trình tạo hồ sơ phía máy chủ

Kể từ khi có thông báo từ Google rằng nó sẽ chuyển Chrome không đầu, rất nhiều người đã chuyển sang sử dụng Python để điều khiển Chrome. Điều này có thể được quy định cho thực tế là trình duyệt không có đầu không có giao diện người dùng đồ họa [GUI], cũng như được điều hướng bằng giao diện dòng lệnh hoặc chương trình. Tuy nhiên, nhiều người đã chuyển sang lái xe Chrome bằng cách sử dụng Python do thực tế là nó vui hơn nhiều

Tuy nhiên, để điều khiển Chrome thông qua Python, rất nhiều người phải đối mặt với những điều trở nên đáng sợ như mở một hồ sơ Chrome thông qua Python được yêu cầu trước khi có thể thực hiện bất kỳ hành động nào khác. Ở đây, chúng tôi sẽ thảo luận về các bước để thực hiện theo cách mở hồ sơ Chrome thông qua Python

Hướng dẫn từng bước để mở hồ sơ Chrome thông qua Python

  • Khởi động trình duyệt Chrome của bạn, sau đó nhấp vào Mở Cài đặt Chrome trong Chrome đó. //Cài đặt/được hiển thị
  • Đi đến phần người, chọn quản lý người khácQuản lý người khác
  • click to add people
  • Nhập tên của bạn và chọn một trong nhiều biểu tượng được hiển thị
  • Bạn phải kiểm tra ‘Create keyboard shutdown key to table for this user user’
  • click vào nút Add
  • Hồ sơ mới của bạn đã được tạo thành công

Everest Okeverest ok Everest Ok

1512 Huy hiệu bạc4 Huy hiệu đồng2 huy hiệu bạc4 huy hiệu đồng

1

Chỉ để chia sẻ những gì đã làm cho tôi. Hồ sơ sử dụng mặc định phức tạp, Chrome tiếp tục bị vui

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options[]
options.add_argument["user-data-dir=C:\\Users\\AtechM_03\\AppData\\Local\\Google\\Chrome\\User Data\\Profile 2"]
driver = webdriver.Chrome[executable_path=r'C:\path\to\chromedriver.exe', chrome_options=options]
driver.get["//www.google.co.in"]
1

Bằng cách thực hiện Chrome này sẽ tạo thư mục

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options[]
options.add_argument["user-data-dir=C:\\Users\\AtechM_03\\AppData\\Local\\Google\\Chrome\\User Data\\Profile 2"]
driver = webdriver.Chrome[executable_path=r'C:\path\to\chromedriver.exe', chrome_options=options]
driver.get["//www.google.co.in"]
5 và giữ tất cả dữ liệu trong đó tôi muốn và thật dễ dàng để chuyển dự án của bạn sang một máy khác

Đã trả lời ngày 10 tháng 8 năm 2019 lúc 2. 58 10/08/2019 lúc 2. 58

1

Câu trả lời này khá đơn giản và giải thích tự nhiên

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options[]
options.add_argument["user-data-dir=C:\\Users\\AtechM_03\\AppData\\Local\\Google\\Chrome\\User Data\\Profile 2"]
driver = webdriver.Chrome[executable_path=r'C:\path\to\chromedriver.exe', chrome_options=options]
driver.get["//www.google.co.in"]
3

Như @madrabbit đã nói loại

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options[]
options.add_argument["user-data-dir=C:\\Users\\AtechM_03\\AppData\\Local\\Google\\Chrome\\User Data\\Profile 2"]
driver = webdriver.Chrome[executable_path=r'C:\path\to\chromedriver.exe', chrome_options=options]
driver.get["//www.google.co.in"]
8 vào thanh địa chỉ để tìm đường dẫn đến dữ liệu hồ sơ Chrome của bạn

  • Nó xuất hiện như thế này trong Windows
    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    options = Options[]
    options.add_argument["user-data-dir=C:\\Users\\AtechM_03\\AppData\\Local\\Google\\Chrome\\User Data\\Profile 2"]
    driver = webdriver.Chrome[executable_path=r'C:\path\to\chromedriver.exe', chrome_options=options]
    driver.get["//www.google.co.in"]
    0
  • Nó có vẻ như thế này trong mac
    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    options = Options[]
    options.add_argument["user-data-dir=C:\\Users\\AtechM_03\\AppData\\Local\\Google\\Chrome\\User Data\\Profile 2"]
    driver = webdriver.Chrome[executable_path=r'C:\path\to\chromedriver.exe', chrome_options=options]
    driver.get["//www.google.co.in"]
    8

Vì vậy, tất cả những gì bạn phải làm là xóa phần cuối cùng

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options[]
options.add_argument["user-data-dir=C:\\Users\\AtechM_03\\AppData\\Local\\Google\\Chrome\\User Data\\Profile 2"]
driver = webdriver.Chrome[executable_path=r'C:\path\to\chromedriver.exe', chrome_options=options]
driver.get["//www.google.co.in"]
9 from đường dẫn hồ sơ

Lưu ý. Bảo đảm bạn không chạy nhiều hơn một phiên bản cùng lúc để tránh các vấn đề. Đảm bảo bạn không chạy nhiều phiên cùng lúc để tránh sự cố

Chủ Đề