Python lấy lõi CPU

Đa xử lý là một gói trong python hỗ trợ khả năng sinh ra các quy trình sử dụng API Python. Nó tương tự như mô-đun luồng trong Python

Hiểu đa xử lý trong Python

Bộ đa xử lý là một máy tính có nghĩa là máy tính có nhiều hơn một bộ xử lý trung tâm. Nếu một máy tính chỉ có một bộ xử lý với nhiều lõi, các tác vụ có thể được chạy song song bằng cách sử dụng đa luồng trong Python

Một hệ thống đa bộ xử lý có khả năng hỗ trợ nhiều bộ xử lý cùng một lúc. Để tìm số lõi CPU có sẵn trên hệ thống của chúng tôi, chúng tôi sử dụng mp. hàm cpu_count[]

Trong bài viết này, chúng ta sẽ sử dụng mô-đun đa xử lý của Python

Đây là mã mẫu để tìm số lượng bộ xử lý trong Python bằng cách sử dụng mô-đun đa xử lý

import multiprocessing as mp

print[mp.cpu_count[]]

đầu ra. 12

Số lượng ở đây là tổng số lõi giữa nhiều bộ xử lý, được tính tổng

Bốn lớp quan trọng nhất của mô-đun này là-

  • Lớp quy trình
  • khóa lớp
  • Lớp xếp hàng
  • Lớp Bi-a

Hãy xem xét từng lớp riêng lẻ…

1. Lớp quy trình

Quy trình là bản sao rẽ nhánh của quy trình hiện tại. Nó tạo một mã định danh quy trình mới và các tác vụ chạy dưới dạng quy trình con độc lập

các hàm start[] và join[] thuộc về lớp này. Để chuyển một đối số thông qua một quy trình, chúng tôi sử dụng từ khóa args

Ví dụ về hàm start[]-

Ở đây, chúng tôi đã tạo một hàm calc_square và calc_cube để tìm bình phương và lập phương của số tương ứng. Trong chức năng chính, chúng tôi đã tạo các đối tượng p1 và p2. p1. bắt đầu[] và p2. start[] sẽ bắt đầu chức năng và gọi p1. tham gia[] và p2. tham gia sẽ chấm dứt quá trình

import time
import multiprocessing

def calc_square[numbers]:
	for n in numbers:
		print['square ' + str[n*n]]

def calc_cube[numbers]:
	for n in numbers:
		print['cube '+ str[n*n*n]]

if __name__ == "__main__":
	arr=[2,3,8,9]
	p1=multiprocessing.Process[target=calc_square,args=[arr,]]
	p2=multiprocessing.Process[target=calc_cube,args=[arr,]]

	p1.start[]
	p2.start[]

	p1.join[]
	p2.join[]

	print["Done"]

đầu ra

square 4
square 9
square 64
square 81
cube 8
cube 27
cube 512
cube 729
Done

2. khóa lớp

Lớp lock cho phép khóa mã để đảm bảo rằng không có quy trình nào khác có thể thực thi mã tương tự cho đến khi nó được giải phóng

Để yêu cầu khóa, chức năng thu thập [] được sử dụng và để giải phóng khóa, chức năng phát hành [] được sử dụng

from multiprocessing import Process, Lock

lock=Lock[]
def printer[data]:
  lock.acquire[]
  try:
      print[data]
  finally:
      lock.release[]

if __name__=="__main__":
  items=['mobile','computer','tablet']
  for item in items:
     p=Process[target=printer,args=[item,]]
     p.start[]

đầu ra

mobile
computer
tablet

3. Lớp xếp hàng

Hàng đợi là một cấu trúc dữ liệu sử dụng kỹ thuật First In First Out [FIFO]. Nó giúp chúng tôi thực hiện giao tiếp giữa các quá trình bằng cách sử dụng các đối tượng Python gốc

Hàng đợi cho phép Quy trình sử dụng dữ liệu được chia sẻ khi được truyền dưới dạng tham số

Hàm put[] được sử dụng để chèn dữ liệu vào hàng đợi và hàm get[] được sử dụng để tiêu thụ dữ liệu từ hàng đợi

import multiprocessing as mp

def sqr[x,q]:
	q.put[x*x]

if __name__ == "__main__":
	q=mp.Queue[] # Instance of queue class created
	processes=[mp.Process[target=sqr,args=[i,q]]for i in range [2,10]] # List of processes within range 2 to 10
	for p in processes:
		p.start[]

	for p in processes:
		p.join[]

	result = [q.get[] for p in processes]
	print[result]

đầu ra

[4, 9, 16, 25, 36, 64, 49, 81]

4. Lớp Bi-a

Lớp pool giúp chúng ta thực thi song song một hàm với nhiều giá trị đầu vào. Khái niệm này được gọi là Song song dữ liệu

Ở đây, mảng [5,9,8] được ánh xạ làm đầu vào trong lệnh gọi hàm. hồ bơi. map[] được sử dụng để chuyển một danh sách nhiều đối số

import multiprocessing as mp

def my_func[x]:
  print[x**x]

def main[]:
  pool = mp.Pool[mp.cpu_count[]]
  result = pool.map[my_func, [5,9,8]]

if __name__ == "__main__":
  main[]

đầu ra

________số 8_______

Phần kết luận

Trong bài viết này, chúng ta đã tìm hiểu bốn lớp quan trọng nhất trong đa xử lý trong Python – Process, Lock, Queue và Pool cho phép sử dụng tốt hơn các lõi CPU và cải thiện hiệu suất

Khi chúng tôi phát triển một dự án Python, đôi khi chúng tôi cần kiểm tra HĐH nào là hệ điều hành hiện tại của người dùng, vì các hệ điều hành khác nhau, chúng tôi có thể phải sử dụng các phương thức khác nhau để thực hiện cùng một chức năng

Trong dự án gần đây của tôi, tôi cũng cần biết người dùng có bao nhiêu lõi CPU để thực hiện một chương trình đa luồng, vì vậy nhân tiện, nó được ghi lại ở đây

Nói một cách đơn giản, mô-đun nền tảng có thể được sử dụng để kiểm tra hệ điều hành của người dùng và hàm cpu_count[] trong mô-đun đa xử lý có thể được sử dụng để tính số lượng lõi CPU

Làm cách nào để lấy lõi CPU Python?

Chúng tôi có thể đếm số lượng CPU trong hệ thống của bạn bằng cách sử dụng os. hàm cpu_count[] . Hàm này sẽ trả về số lượng CPU hợp lý trong hệ thống của bạn dưới dạng số nguyên.

Làm cách nào để lấy thông tin CPU bằng Python?

Chúng ta có thể làm điều này bằng cách sử dụng. Phương thức cpu_count[] trả về một giá trị số cho số lượng lõi. .
#Physical cores print[f"Số lượng lõi vật lý. {psutil. .
#In tần số hiện tại[f"Tần số CPU hiện tại. {psutil. .
#In sử dụng CPU trên toàn hệ thống[f"Mức sử dụng CPU hiện tại. {psutil

Python sử dụng bao nhiêu CPU?

Trong Python, việc sử dụng một CPU là do khóa trình thông dịch toàn cầu [GIL], khóa này chỉ cho phép một luồng mang trình thông dịch Python tại bất kỳ thời điểm nào. GIL được triển khai để xử lý sự cố quản lý bộ nhớ, nhưng kết quả là Python bị hạn chế sử dụng một bộ xử lý .

Python có thể tận dụng lợi thế của nhiều lõi không?

Những điểm rút ra chính. Python KHÔNG phải là ngôn ngữ đơn luồng. Các quy trình Python thường sử dụng một luồng đơn vì GIL. Mặc dù có GIL, các thư viện thực hiện các tác vụ tính toán nặng như numpy, scipy và pytorch sử dụng triển khai dựa trên C hoàn toàn, cho phép sử dụng nhiều lõi .

Chủ Đề