Python song song cho vòng lặp = asyncio

Song song hóa vòng lặp có nghĩa là trải rộng tất cả các quy trình song song bằng cách sử dụng nhiều lõi. Khi chúng tôi có nhiều công việc, mỗi tính toán không đợi công việc trước đó xử lý song song hoàn thành. Thay vào đó, nó sử dụng một bộ xử lý khác để hoàn thành

Trong bài viết này, chúng ta sẽ song song hóa một vòng lặp for trong Python

Sử dụng Mô-đun multiprocessing để song song hóa vòng lặp for trong Python

Để song song hóa vòng lặp, chúng ta có thể sử dụng gói multiprocessing trong Python vì nó hỗ trợ tạo một quy trình con theo yêu cầu của một quy trình đang diễn ra khác

Mô-đun multiprocessing có thể được sử dụng thay vì vòng lặp for để thực thi các thao tác trên mọi phần tử của iterable. Đó là đối tượng

from joblib import Parallel, delayed
import math

def sqrt_func[i, j]:
    time.sleep[1]
    return math.sqrt[i**j]

Parallel[n_jobs=2][delayed[sqrt_func][i, j] for i in range[5] for j in range[2]]
0 có thể được sử dụng, vì sử dụng nhiều luồng trong Python sẽ không cho kết quả tốt hơn do Khóa phiên dịch toàn cầu

Ví dụ,

import multiprocessing

def sumall[value]:
    return sum[range[1, value + 1]]

pool_obj = multiprocessing.Pool[]

answer = pool_obj.map[sumall,range[0,5]]
print[answer]

đầu ra

Sử dụng Mô-đun
from joblib import Parallel, delayed
import math

def sqrt_func[i, j]:
    time.sleep[1]
    return math.sqrt[i**j]

Parallel[n_jobs=2][delayed[sqrt_func][i, j] for i in range[5] for j in range[2]]
1 để song song hóa vòng lặp for trong Python

Mô-đun

from joblib import Parallel, delayed
import math

def sqrt_func[i, j]:
    time.sleep[1]
    return math.sqrt[i**j]

Parallel[n_jobs=2][delayed[sqrt_func][i, j] for i in range[5] for j in range[2]]
1 sử dụng đa xử lý để chạy nhiều lõi CPU nhằm thực hiện song song vòng lặp for. Nó cung cấp một đường dẫn nhẹ giúp ghi nhớ mẫu để tính toán song song dễ dàng và đơn giản

Để thực hiện xử lý song song, chúng tôi phải đặt số lượng công việc và số lượng công việc được giới hạn ở số lượng lõi trong CPU hoặc số lượng có sẵn hoặc không hoạt động tại thời điểm này

Hàm

from joblib import Parallel, delayed
import math

def sqrt_func[i, j]:
    time.sleep[1]
    return math.sqrt[i**j]

Parallel[n_jobs=2][delayed[sqrt_func][i, j] for i in range[5] for j in range[2]]
5 cho phép chúng ta yêu cầu Python gọi một phương thức được đề cập cụ thể sau một thời gian

Hàm

from joblib import Parallel, delayed
import math

def sqrt_func[i, j]:
    time.sleep[1]
    return math.sqrt[i**j]

Parallel[n_jobs=2][delayed[sqrt_func][i, j] for i in range[5] for j in range[2]]
6 tạo một thể hiện song song với các lõi được chỉ định [2 trong trường hợp này]

Chúng ta cần tạo một danh sách để thực thi mã. Sau đó, danh sách được chuyển sang song song, phát triển hai luồng và phân phối danh sách nhiệm vụ cho chúng

Xem mã dưới đây

from joblib import Parallel, delayed
import math

def sqrt_func[i, j]:
    time.sleep[1]
    return math.sqrt[i**j]

Parallel[n_jobs=2][delayed[sqrt_func][i, j] for i in range[5] for j in range[2]]

đầu ra

[1.0,
 0.0,
 1.0,
 1.0,
 1.0,
 1.4142135623730951,
 1.0,
 1.7320508075688772,
 1.0,
 2.0]

Sử dụng Mô-đun
from joblib import Parallel, delayed
import math

def sqrt_func[i, j]:
    time.sleep[1]
    return math.sqrt[i**j]

Parallel[n_jobs=2][delayed[sqrt_func][i, j] for i in range[5] for j in range[2]]
7 để song song hóa vòng lặp for trong Python

Mô-đun

from joblib import Parallel, delayed
import math

def sqrt_func[i, j]:
    time.sleep[1]
    return math.sqrt[i**j]

Parallel[n_jobs=2][delayed[sqrt_func][i, j] for i in range[5] for j in range[2]]
7 là mô-đun đơn luồng và chạy vòng lặp sự kiện bằng cách tạm thời tạm dừng quy trình đăng quang bằng cách sử dụng các phương thức
[1.0,
 0.0,
 1.0,
 1.0,
 1.0,
 1.4142135623730951,
 1.0,
 1.7320508075688772,
 1.0,
 2.0]
0 hoặc
[1.0,
 0.0,
 1.0,
 1.0,
 1.0,
 1.4142135623730951,
 1.0,
 1.7320508075688772,
 1.0,
 2.0]
1

Đoạn mã dưới đây sẽ thực thi song song khi nó được gọi mà không ảnh hưởng đến chức năng chính để chờ. Vòng lặp cũng chạy song song với hàm main

Các vòng lặp song song của Python giúp trải rộng các quy trình song song bằng cách sử dụng nhiều lõi. Khi có nhiều công việc, xử lý song song sử dụng các bộ xử lý khác nhau mà không cần chờ hoàn thành công việc trước đó

Phạm vi

  • Bài viết này hướng dẫn bạn về tầm quan trọng của các vòng lặp song song trong Python
  • Bạn sẽ tìm hiểu về các cách khác nhau để song song hóa vòng lặp for trong Python

Giới thiệu

Khái niệm vòng lặp for song song trong Python là một trong những khái niệm phổ biến nhất để thể hiện tính song song trong các ngôn ngữ và thư viện song song. Vòng lặp Parallel For của Python tương tự như vòng lặp for với ngoại lệ duy nhất là nó cho phép các phép lặp chạy song song trên nhiều luồng

Vòng lặp song song là gì?

Một vòng lặp có các lần lặp được thực hiện đồng thời ít nhất một phần bởi một số luồng hoặc quy trình được gọi là vòng lặp song song

Cần tạo song song cho vòng lặp

Vòng lặp for song song trong Python là vòng lặp trong đó các câu lệnh trong vòng lặp có thể chạy song song. trên các lõi, bộ xử lý hoặc luồng riêng biệt. Python song song cho vòng lặp rất quan trọng vì chúng

  • Tăng tốc thời gian xử lý tổng thể
  • Cải thiện hiệu suất xử lý dữ liệu

Phương pháp1. Sử dụng Mô-đun đa xử lý

đa xử lý. Hồ bơi[]. map[] là một lựa chọn tốt để song song hóa các vòng lặp đơn giản. Để song song hóa vòng lặp, gói đa xử lý cung cấp một nhóm quy trình với các chức năng hữu ích để tự động quản lý nhóm quy trình công nhân. Theo mặc định, thể hiện của lớp Pool được tạo sử dụng tất cả các lõi CPU có sẵn. Phiên bản song song của hàm map[] tích hợp có một đối số duy nhất. Nó gọi cùng một chức năng cho mọi dữ liệu trong lần lặp được cung cấp và trả về một giá trị trả về có thể lặp lại từ hàm đích. Khi tất cả công việc được thực hiện bằng hàm close[], pool_obj được đóng lại để giải phóng các worker process

Mã số

import multiprocessing
def printVal[value]:
    return ["hello "*[value]]
pool_obj = multiprocessing.Pool[]
ans = pool_obj.map[printVal,range[0,4]]
print[ans]
pool_obj.close[]

đầu ra

['', 'hello ', 'hello hello ', 'hello hello hello ']

Phương pháp 2. Sử dụng Mô-đun Joblib

Joblib là một bộ công cụ để cung cấp đường dẫn nhẹ trong Python. Nó chủ yếu nhằm mục đích tránh tính toán cùng một thứ hai lần. Để thực hiện xử lý song song, chúng ta phải đặt số lượng công việc, giới hạn ở số lượng lõi trong CPU. Hàm bị trì hoãn [] trì hoãn cuộc gọi phương thức được đề cập trong một thời gian. Hàm Parallel[] tạo một phiên bản song song với số lượng lõi được chỉ định

Mã số

import joblib
import math
def multiple_of_six[i]:
    return [i*6]
print[joblib.Parallel[n_jobs=2][joblib.delayed[multiple_of_six][i] for i in range[5]]]

đầu ra

Phương pháp 3. Sử dụng Mô-đun Asyncio

Mô-đun asyncio là một luồng chạy các vòng lặp bằng cách tạm dừng trình tự bằng cách sử dụng các phương thức chờ. Hàm main và hàm được gọi chạy song song không ảnh hưởng lẫn nhau. Vòng lặp cũng chạy song song với hàm main

Bạn có thể song song hóa các vòng lặp trong Python không?

Bạn có thể chuyển đổi các vòng lặp for lồng nhau để thực thi đồng thời hoặc song song trong Python bằng cách sử dụng nhóm luồng hoặc nhóm quy trình , tùy thuộc vào loại tác vụ đang được thực thi.

Là asyncio song song hoặc đồng thời?

Kịch bản

Là asyncio song song?

asyncio không chạy song song mọi thứ . Nó chạy một nhiệm vụ cho đến khi chờ đợi, sau đó chuyển sang nhiệm vụ tiếp theo. Sleep s trong ví dụ đầu tiên của bạn là thứ làm cho các tác vụ nhường quyền kiểm soát cho nhau.

Tôi có thể sử dụng asyncio với đa xử lý không?

Bạn sẽ có thể kết hợp asyncio và đa xử lý một cách an toàn mà không gặp quá nhiều khó khăn , mặc dù bạn không nên trực tiếp sử dụng đa xử lý. Tội lỗi chính của asyncio [và bất kỳ khung không đồng bộ dựa trên vòng lặp sự kiện nào khác] đang chặn vòng lặp sự kiện.

Chủ Đề