Python tăng tốc cho đa xử lý vòng lặp

Tóm lược. trong hướng dẫn này, bạn sẽ học cách chạy mã song song bằng cách sử dụng mô-đun đa xử lý Python

Giới thiệu về đa xử lý Python

Nói chung, các chương trình xử lý hai loại nhiệm vụ

  1. Nhiệm vụ ràng buộc I/O. nếu một tác vụ thực hiện nhiều hoạt động đầu vào/đầu ra, thì nó được gọi là tác vụ giới hạn I/O. Các ví dụ điển hình về các tác vụ liên kết I/O là đọc từ tệp, ghi vào tệp, kết nối với cơ sở dữ liệu và tạo yêu cầu mạng. Đối với các tác vụ liên kết I/O, bạn có thể sử dụng đa luồng để tăng tốc chúng
  2. nhiệm vụ ràng buộc CPU. khi một tác vụ thực hiện nhiều thao tác sử dụng CPU, nó được gọi là tác vụ liên kết với CPU. Ví dụ: tính toán số, thay đổi kích thước hình ảnh và truyền phát video là các tác vụ liên quan đến CPU. Để tăng tốc chương trình với nhiều tác vụ liên quan đến CPU, bạn sử dụng đa xử lý

Đa xử lý cho phép hai hoặc nhiều bộ xử lý xử lý đồng thời hai hoặc nhiều phần khác nhau của chương trình. Trong Python, bạn sử dụng mô-đun

It took 12.94 second[s] to finish

Code language: Python [python]
5 để triển khai đa xử lý

Ví dụ đa xử lý Python

Xem chương trình sau

import time def task[n=100_000_000]: while n: n -= 1 if __name__ == '__main__': start = time.perf_counter[] task[] task[] finish = time.perf_counter[] print[f'It took {finish-start: .2f} second[s] to finish']

Code language: Python [python]

đầu ra

It took 12.94 second[s] to finish

Code language: Python [python]

Làm thế nào nó hoạt động

Đầu tiên, xác định hàm ________ 06 có vòng lặp lớn từ 10 triệu thành 0. Hàm ________ 06 bị ràng buộc bởi CPU vì nó liên quan đến tính toán

def task[n=100_000_000]: while n: n -= 1

Code language: Python [python]

Thứ hai, gọi hàm

It took 12.94 second[s] to finish

Code language: Python [python]
8 hai lần và ghi lại thời gian xử lý

if __name__ == '__main__': start = time.perf_counter[] task[] task[] finish = time.perf_counter[] print[f'It took {finish-start: .2f} second[s] to finish']

Code language: Python [python]

Trong máy tính của chúng tôi, phải mất 0. 78 giây để hoàn thành

Sử dụng mô-đun đa xử lý

Chương trình sau sử dụng mô-đun đa xử lý nhưng tốn ít thời gian hơn

________số 8

đầu ra

It took 6.45 second[s] to finish

Code language: Python [python]

Làm thế nào nó hoạt động

Đầu tiên, nhập mô-đun đa xử lý

import time def task[n=100_000_000]: while n: n -= 1 if __name__ == '__main__': start = time.perf_counter[] task[] task[] finish = time.perf_counter[] print[f'It took {finish-start: .2f} second[s] to finish']

Code language: Python [python]
0

Thứ hai, tạo hai quy trình và chuyển chức năng tác vụ cho mỗi quy trình

import time def task[n=100_000_000]: while n: n -= 1 if __name__ == '__main__': start = time.perf_counter[] task[] task[] finish = time.perf_counter[] print[f'It took {finish-start: .2f} second[s] to finish']

Code language: Python [python]
1

Lưu ý rằng hàm tạo

It took 12.94 second[s] to finish

Code language: Python [python]
9 trả về một đối tượng

def task[n=100_000_000]: while n: n -= 1

Code language: Python [python]
0 mới

Thứ ba, gọi phương thức

def task[n=100_000_000]: while n: n -= 1

Code language: Python [python]
1 của đối tượng

def task[n=100_000_000]: while n: n -= 1

Code language: Python [python]
0 để bắt đầu quá trình

import time def task[n=100_000_000]: while n: n -= 1 if __name__ == '__main__': start = time.perf_counter[] task[] task[] finish = time.perf_counter[] print[f'It took {finish-start: .2f} second[s] to finish']

Code language: Python [python]
6

Cuối cùng, đợi quá trình hoàn tất bằng cách gọi phương thức

def task[n=100_000_000]: while n: n -= 1

Code language: Python [python]
3

import time def task[n=100_000_000]: while n: n -= 1 if __name__ == '__main__': start = time.perf_counter[] task[] task[] finish = time.perf_counter[] print[f'It took {finish-start: .2f} second[s] to finish']

Code language: Python [python]
8

Ví dụ thực tế đa xử lý Python

Chúng tôi sẽ sử dụng mô-đun đa xử lý để thay đổi kích thước hình ảnh có độ phân giải cao

Đầu tiên, cài đặt thư viện

def task[n=100_000_000]: while n: n -= 1

Code language: Python [python]
4 để xử lý ảnh

It took 12.94 second[s] to finish

Code language: Python [python]
0

Thứ hai, phát triển chương trình tạo hình thu nhỏ của ảnh trong thư mục

def task[n=100_000_000]: while n: n -= 1

Code language: Python [python]
5 và lưu chúng vào thư mục

def task[n=100_000_000]: while n: n -= 1

Code language: Python [python]
6

It took 12.94 second[s] to finish

Code language: Python [python]
1

Trong máy tính của chúng tôi, mất khoảng 1. 28s để hoàn thành

It took 12.94 second[s] to finish

Code language: Python [python]
2

Thứ ba, sửa đổi chương trình để sử dụng đa xử lý. Mỗi quá trình sẽ tạo một hình thu nhỏ cho một hình ảnh

Đa xử lý trong Python có tăng tốc không?

Nó được sử dụng để tăng tốc đáng kể cho chương trình của bạn, đặc biệt nếu chương trình có nhiều tác vụ đòi hỏi nhiều CPU . Trong trường hợp này, nhiều chức năng có thể chạy cùng nhau vì mỗi chức năng sẽ sử dụng một lõi CPU khác nhau, điều này sẽ cải thiện việc sử dụng CPU.

Làm cách nào để sử dụng đa xử lý trong Python cho vòng lặp?

Điều này có thể đạt được bằng cách trước tiên tạo một hệ thống đa xử lý. Quy trình thực thi mỗi lần lặp của vòng lặp, chỉ định hàm sẽ thực thi và truyền bất kỳ đối số nào được yêu cầu . Các quy trình sau đó có thể được bắt đầu để bắt đầu thực hiện các tác vụ song song. Quá trình chính sau đó có thể đợi tất cả các tác vụ hoàn thành.

Đa xử lý có nhanh hơn đa luồng trong Python không?

Ngoài ra, các quy trình yêu cầu nhiều tài nguyên hơn các luồng. Do đó, sẽ tốt hơn nếu có đa xử lý làm tùy chọn thứ hai cho các tác vụ liên kết với IO, với đa luồng là tùy chọn đầu tiên. . Python3

Vòng lặp nào nhanh hơn trong Python?

Như bạn có thể thấy, vòng lặp cho từng vượt trội so với các đối thủ cạnh tranh của nó với biên độ lớn. Ngoài ra, tốc độ thực hiện thay đổi đáng kể giữa thí sinh nhanh nhất và vòng lặp while lỏng lẻo hơn. vòng lặp for-each nhanh hơn sáu lần so với vòng lặp while. Ngay cả vòng lặp for-range cũng nhanh hơn gần hai lần so với vòng lặp while.

Chủ Đề