Docker chạy nhiều quy trình Python

Đa xử lý trong Python là gói tích hợp sẵn cho phép hệ thống chạy đồng thời nhiều quy trình. Nó sẽ cho phép chia các ứng dụng thành các luồng nhỏ hơn có thể chạy độc lập. Sau đó, hệ điều hành có thể phân bổ tất cả các luồng hoặc quy trình này cho bộ xử lý để chạy chúng song song, do đó cải thiện hiệu suất và hiệu quả tổng thể

Tại sao nên sử dụng đa xử lý trong Python?

Thực hiện nhiều hoạt động cho một bộ xử lý trở nên khó khăn. Khi số lượng quy trình tiếp tục tăng lên, bộ xử lý sẽ phải tạm dừng quy trình hiện tại và chuyển sang quy trình tiếp theo để duy trì hoạt động của chúng. Như vậy sẽ phải ngắt từng task, từ đó cản trở hiệu suất

Bạn có thể coi đó là một nhân viên trong một tổ chức được giao nhiệm vụ thực hiện các công việc ở nhiều phòng ban. Nếu nhân viên phải quản lý bán hàng, quản lý tài khoản, thậm chí cả backend thì khi vào tài khoản, anh ta sẽ phải dừng bán hàng và ngược lại.

Giả sử có nhiều nhân viên khác nhau, mỗi người thực hiện một nhiệm vụ cụ thể. Nó trở nên đơn giản hơn, phải không? . Các luồng nhiệm vụ nhỏ hơn hoạt động giống như các nhân viên khác nhau, giúp xử lý và quản lý các quy trình khác nhau dễ dàng hơn. Một hệ thống đa xử lý có thể được biểu diễn dưới dạng

  • Một hệ thống có nhiều hơn một bộ xử lý trung tâm
  • Một bộ xử lý đa lõi, tôi. e. , một đơn vị tính toán với nhiều đơn vị xử lý lõi độc lập

Trong đa xử lý, hệ thống có thể phân chia và gán nhiệm vụ cho các bộ xử lý khác nhau

Mô-đun đa xử lý là gì?

Mô-đun đa xử lý Python cung cấp nhiều lớp cho phép chúng tôi xây dựng các chương trình song song để triển khai đa xử lý trong Python. Nó cung cấp một API dễ sử dụng để phân chia các quy trình giữa nhiều bộ xử lý, do đó tận dụng triệt để đa xử lý. Nó khắc phục những hạn chế của Khóa phiên dịch toàn cầu [GIL] bằng cách sử dụng các quy trình phụ thay vì các luồng. Các lớp chính của mô-đun đa xử lý Python là

  • Tiến trình
  • Xếp hàng
  • Khóa

Hãy sử dụng một ví dụ để hiểu rõ hơn về việc sử dụng mô-đun đa xử lý trong Python

Khóa đào tạo Python

Tìm hiểu về thao tác dữ liệu trong Python Khám phá khóa học

Ví dụ - Sử dụng Lớp quy trình để triển khai đa xử lý trong Python

# nhập mô-đun đa xử lý Python

nhập đa xử lý

def prnt_cu[n]

print["Khối lập phương. {}". định dạng [n * n * n]]

def prnt_squ[n]

print["Hình vuông. {}". định dạng [n * n]]

nếu __name__ == "__main__"

# tạo nhiều quy trình

proc1 = đa xử lý. Quá trình [đích=prnt_squ, args=[5, ]]

proc2 = đa xử lý. Quá trình [đích=prnt_cu, args=[5, ]]

# Bắt đầu quá trình 1

proc1. bắt đầu[]

# Bắt đầu quá trình 2

proc2. bắt đầu[]

# Chờ cho đến khi proc1 kết thúc

proc1. tham gia[]

# Chờ cho đến khi proc2 kết thúc

proc2. tham gia[]

# Xử lý xong

print["Cả 2 tiến trình đã hoàn thành. "]

đầu ra

Bây giờ, đã đến lúc hiểu đoạn mã trên và xem mô-đun đa xử lý và lớp quy trình giúp xây dựng các chương trình song song như thế nào

  • Lần đầu tiên bạn sử dụng lệnh “nhập đa xử lý” để nhập mô-đun
  • Tiếp theo, bạn đã tạo các đối tượng lớp Process. proc1 và proc2. Các đối số được truyền trong các đối tượng này là
    • Mục tiêu. Các chức năng được sử dụng
    • tranh luận. Các đối số được đưa ra trong các chức năng
  • Sau khi xây dựng đối tượng, bạn phải sử dụng phương thức start[] để bắt đầu các quy trình
  • Cuối cùng, bạn đã sử dụng phương thức join[] để dừng thực thi chương trình hiện tại cho đến khi nó thực thi các quy trình. Như vậy đầu tiên chương trình sẽ chạy proc1 và proc2. Sau đó nó sẽ chuyển về các câu lệnh sau của chương trình đang chạy

khóa học miễn phí. Giới thiệu về Numpy

Nắm vững các nguyên tắc cơ bản của Numpy Đăng ký ngay

Các đường ống được sử dụng để đa xử lý trong Python là gì?

Trong khi sử dụng đa xử lý trong Python, Đường ống đóng vai trò là kênh liên lạc. Đường ống rất hữu ích khi bạn muốn bắt đầu giao tiếp giữa nhiều quy trình. Chúng trả về hai đối tượng kết nối, một đối tượng cho mỗi đầu của Ống và sử dụng các phương thức send[] & recv[] để giao tiếp. Hãy xem một ví dụ để hiểu rõ. Trong đoạn mã dưới đây, bạn sẽ sử dụng một Đường ống để gửi một số thông tin từ kết nối con đến kết nối gốc

nhập đa xử lý

từ nhập khẩu đa xử lý Quy trình, Đường ống

def exm_function[c]

c. gửi [['Xin chào. Đây là thông tin trẻ em']]

c. đóng lại[]

nếu __name__ == '__main__'

par_c, chi_c = Ống[]

mp1 = đa xử lý. Quá trình [đích=exm_function, args=[chi_c,]]

mp1. bắt đầu[]

in [par_c. recv[] ]

mp1. tham gia[]

đầu ra

Hàng đợi được sử dụng để đa xử lý trong Python là gì?

Hàng đợi trong Python là một cấu trúc dữ liệu dựa trên khái niệm FIFO [First-In-First-Out]. Giống như Đường ống, ngay cả một hàng đợi cũng giúp giao tiếp giữa các quy trình khác nhau trong đa xử lý trong Python. Nó cung cấp các phương thức put[] và get[] để thêm và nhận dữ liệu từ hàng đợi. Đây là một ví dụ cho thấy việc sử dụng hàng đợi để đa xử lý trong Python. Đoạn mã này sẽ tạo một hàm để kiểm tra xem một số là chẵn hay lẻ và chèn nó vào hàng đợi. Sau đó, bạn sẽ bắt đầu quá trình và in các số

nhập đa xử lý

def chẵn_no[num, n]

cho tôi trong số

nếu tôi% 2 == 0

N. đưa tôi]

nếu __name__ == "__main__"

n = đa xử lý. Xếp hàng[]

p = đa xử lý. Quá trình [đích=even_no, args=[phạm vi[10], n]]

P. bắt đầu[]

P. tham gia[]

trong khi n

in [n. được[]]

đầu ra

Khoa học dữ liệu MIỄN PHÍ với khóa học Python

Bắt đầu học Khoa học dữ liệu với Python MIỄN PHÍ Bắt đầu học

Các khóa được sử dụng để đa xử lý trong Python là gì?

Khóa được sử dụng để khóa các quy trình trong khi sử dụng đa xử lý trong Python. Với các phương thức thu thập [] và giải phóng [] của nó, bạn có thể khóa và tiếp tục các quy trình. Do đó, nó cho phép bạn thực hiện các tác vụ cụ thể dựa trên mức độ ưu tiên trong khi dừng các quy trình khác. Mã dưới đây sử dụng cơ chế khóa trên hệ thống giống như ATM

nhập đa xử lý

# Chức năng rút tiền

def rút [bóng, khóa]

cho _ trong phạm vi [10000]

Khóa. có được, thu được[]

bóng. giá trị = bal. giá trị - 1

Khóa. giải phóng[]

# Chức năng gửi tiền

def dpst[bal, lock]

cho _ trong phạm vi [10000]

Khóa. có được, thu được[]

bóng. giá trị = bal. giá trị + 1

Khóa. giải phóng[]

giao dịch chắc chắn[]

# số dư ban đầu

bal = đa xử lý. Giá trị['i', 100]

# tạo đối tượng khóa

khóa = đa xử lý. Khóa[]

# tạo quy trình

proc1 = đa xử lý. Quá trình [đích=wthdrw, args=[bal,lock]]

proc2 = đa xử lý. Quá trình [đích=dpst, args=[bal,lock]]

# quy trình bắt đầu

proc1. bắt đầu[]

proc2. bắt đầu[]

# đang chờ quá trình kết thúc

proc1. tham gia[]

proc2. tham gia[]

# in số dư cuối kỳ

print["Số dư cuối kỳ = {}". định dạng [bal. giá trị]]

nếu __name__ == "__main__"

cho _ trong phạm vi[10]

# thực hiện quy trình giao dịch

giao dịch[]

đầu ra

Mong muốn chuyển sang lĩnh vực lập trình?

Phần kết luận

Trong bài viết này, bạn đã tìm hiểu về đa xử lý trong Python là gì và cách sử dụng nó. Việc sử dụng đa xử lý thực tế nhất là chia sẻ tài nguyên CPU và hoạt động của ATM, như bạn đã thấy trong ví dụ trước. Do sự dễ dàng mà nó cung cấp để quản lý nhiều quy trình, khái niệm đa xử lý trong Python chắc chắn sẽ thu hút được rất nhiều sự chú ý. Sẽ là một bước đi khôn ngoan để có được sự hiểu biết vững chắc và thực hành.  

Nếu bạn là người mới và điều này quá khó hiểu, bạn có thể bắt đầu học những điều cơ bản trước. Bạn có thể tham khảo Hướng dẫn Python cho người mới bắt đầu của Simplilearn để làm quen với các khái niệm Python cơ bản. Khi bạn đã hiểu rõ những kiến ​​thức cơ bản, bạn có thể chọn tham gia Khóa học cấp chứng chỉ Python trực tuyến của chúng tôi để phát triển Python vượt trội

Bạn có câu hỏi nào cho chúng tôi không? . Các chuyên gia của chúng tôi sẽ liên hệ lại với bạn theo cùng một cách, CÀNG SỚM CÀNG TỐT

học tập vui vẻ

Giới thiệu về tác giả

đơn giản

Simplilearn là một trong những nhà cung cấp dịch vụ đào tạo trực tuyến hàng đầu thế giới về Tiếp thị kỹ thuật số, Điện toán đám mây, Quản lý dự án, Khoa học dữ liệu, CNTT, Phát triển phần mềm và nhiều công nghệ mới nổi khác

Bạn có thể chạy nhiều quy trình trong bộ chứa Docker không?

Bạn có thể có nhiều quy trình , nhưng để tận dụng tối đa Docker, hãy tránh để một vùng chứa chịu trách nhiệm cho nhiều khía cạnh của ứng dụng tổng thể của bạn. Bạn có thể kết nối nhiều vùng chứa bằng mạng do người dùng xác định và khối lượng chia sẻ.

Bạn có thể chạy nhiều chương trình Python cùng một lúc không?

Đa xử lý trong Python là gói tích hợp cho phép hệ thống chạy nhiều quy trình đồng thời . Nó sẽ cho phép chia các ứng dụng thành các luồng nhỏ hơn có thể chạy độc lập.

Dockerfile có thể chạy nhiều dấu nhắc lệnh không?

Ngoài việc chạy nhiều lệnh trong lệnh chạy, chúng ta cũng có thể chỉ định nhiều lệnh trong phần CMD/ENTRYPOINT của Dockerfile . CMD và ENTRYPOINT của Dockerfile xác định các lệnh mặc định sẽ thực thi khi khởi chạy vùng chứa.

Có bao nhiêu quy trình có thể chạy trong bộ chứa Docker?

Thiết kế ứng dụng dựa trên vùng chứa khuyến khích các nguyên tắc nhất định. Một trong những nguyên tắc này là chỉ nên có một quy trình chạy trong một vùng chứa. Điều đó có nghĩa là, một Docker container chỉ nên có một chương trình chạy bên trong nó.

Chủ Đề