Quy trình chuỗi Python

Bản tóm tắt. trong hướng dẫn này, bạn sẽ học cách sử dụng mô-đun luồng Python để phát triển các ứng dụng đa luồng

Ứng dụng đơn luồng

Hãy bắt đầu với một chương trình đơn giản

from time import sleep, perf_counter def task[]: print['Starting a task...'] sleep[1] print['done'] start_time = perf_counter[] task[] task[] end_time = perf_counter[] print[f'It took {end_time- start_time: 0.2f} second[s] to complete.']

Code language: Python [python]

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

Đầu tiên, nhập các hàm

def task[]: print['Starting a task...'] sleep[1] print['done']

Code language: Python [python]
7 và

def task[]: print['Starting a task...'] sleep[1] print['done']

Code language: Python [python]
8 từ mô-đun

def task[]: print['Starting a task...'] sleep[1] print['done']

Code language: Python [python]
9

from time import sleep, perf_counter

Code language: Python [python]

Thứ hai, xác định chức năng mất một giây để hoàn thành

def task[]: print['Starting a task...'] sleep[1] print['done']

Code language: Python [python]

Thứ ba, lấy giá trị của bộ đếm hiệu suất bằng cách gọi hàm

def task[]: print['Starting a task...'] sleep[1] print['done']

Code language: Python [python]
8

start_time = perf_counter[]

Code language: Python [python]

Thứ tư, gọi hàm

start_time = perf_counter[]

Code language: Python [python]
1 hai lần

task[] task[]

Code language: Python [python]

Thứ năm, lấy giá trị của bộ đếm hiệu suất bằng cách gọi hàm

def task[]: print['Starting a task...'] sleep[1] print['done']

Code language: Python [python]
8

def task[]: print['Starting a task...'] sleep[1] print['done']

Code language: Python [python]
1

Cuối cùng, xuất thời gian cần thiết để hoàn thành việc chạy hàm

start_time = perf_counter[]

Code language: Python [python]
1 hai lần

def task[]: print['Starting a task...'] sleep[1] print['done']

Code language: Python [python]
3

Đây là đầu ra

def task[]: print['Starting a task...'] sleep[1] print['done']

Code language: Python [python]
4

Như bạn có thể mong đợi, chương trình mất khoảng hai giây để hoàn thành. Nếu bạn gọi hàm

start_time = perf_counter[]

Code language: Python [python]
1 10 lần, sẽ mất khoảng 10 giây để hoàn thành

Sơ đồ sau minh họa cách hoạt động của chương trình

Đầu tiên, hàm

start_time = perf_counter[]

Code language: Python [python]
1 thực thi và ngủ trong một giây. Sau đó, nó thực thi lần thứ hai và cũng ngủ thêm một giây nữa. Cuối cùng, chương trình hoàn thành

Khi hàm

start_time = perf_counter[]

Code language: Python [python]
1 gọi hàm

def task[]: print['Starting a task...'] sleep[1] print['done']

Code language: Python [python]
7, CPU không hoạt động. Nói cách khác, CPU không làm gì cả, điều này không hiệu quả về mặt sử dụng tài nguyên

Chương trình này có một tiến trình với một luồng duy nhất, được gọi là luồng chính. Vì chương trình chỉ có một luồng nên được gọi là chương trình đơn luồng

Sử dụng luồng Python để phát triển một ví dụ về chương trình đa luồng

Để tạo một chương trình đa luồng, bạn cần sử dụng mô-đun Python

start_time = perf_counter[]

Code language: Python [python]
8

Đầu tiên, nhập lớp

start_time = perf_counter[]

Code language: Python [python]
9 từ mô-đun

start_time = perf_counter[]

Code language: Python [python]
8

def task[]: print['Starting a task...'] sleep[1] print['done']

Code language: Python [python]
2

Thứ hai, tạo một luồng mới bằng cách khởi tạo một thể hiện của lớp

start_time = perf_counter[]

Code language: Python [python]
9

def task[]: print['Starting a task...'] sleep[1] print['done']

Code language: Python [python]
4

task[] task[]

Code language: Python [python]
2 chấp nhận nhiều tham số. Những cái chính là

  • task[] task[]

    Code language: Python [python]
    3. chỉ định một hàm [

    task[] task[]

    Code language: Python [python]
    4] để chạy trong luồng mới
  • task[] task[]

    Code language: Python [python]
    5. chỉ định các đối số của hàm [______94]. Đối số

    task[] task[]

    Code language: Python [python]
    5 là một Tuple

Thứ ba, bắt đầu luồng bằng cách gọi phương thức

task[] task[]

Code language: Python [python]
8 của thể hiện

start_time = perf_counter[]

Code language: Python [python]
9

from time import sleep, perf_counter

Code language: Python [python]
0

Nếu bạn muốn chờ tiểu trình hoàn thành trong tiểu trình chính, bạn có thể gọi phương thức

def task[]: print['Starting a task...'] sleep[1] print['done']

Code language: Python [python]
10

from time import sleep, perf_counter

Code language: Python [python]
1

Bằng cách gọi phương thức

def task[]: print['Starting a task...'] sleep[1] print['done']

Code language: Python [python]
10, luồng chính sẽ đợi luồng thứ hai hoàn thành trước khi kết thúc

Chương trình sau minh họa cách sử dụng mô-đun

start_time = perf_counter[]

Code language: Python [python]
8

from time import sleep, perf_counter

Code language: Python [python]
2

Làm thế nào nó hoạt động. [và chúng tôi sẽ chỉ tập trung vào phần luồng]

Đầu tiên, tạo hai chủ đề mới

from time import sleep, perf_counter

Code language: Python [python]
3

Thứ hai, bắt đầu cả hai luồng bằng cách gọi phương thức

task[] task[]

Code language: Python [python]
8

from time import sleep, perf_counter

Code language: Python [python]
4

Thứ ba, đợi cả hai chủ đề hoàn thành

from time import sleep, perf_counter

Code language: Python [python]
5

Cuối cùng, hiển thị thời gian thực hiện

def task[]: print['Starting a task...'] sleep[1] print['done']

Code language: Python [python]
3

đầu ra

from time import sleep, perf_counter

Code language: Python [python]
7

Khi chương trình thực thi, nó sẽ có ba luồng. luồng chính được tạo bởi trình thông dịch Python và hai luồng được tạo bởi chương trình

Như được hiển thị rõ ràng từ đầu ra, chương trình mất một giây thay vì hai giây để hoàn thành

Sơ đồ sau đây cho thấy các luồng thực thi như thế nào

Truyền đối số cho chủ đề

Chương trình sau đây cho thấy cách truyền đối số cho hàm được gán cho luồng

from time import sleep, perf_counter

Code language: Python [python]
8

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

Đầu tiên, xác định một hàm

start_time = perf_counter[]

Code language: Python [python]
1 chấp nhận một đối số

from time import sleep, perf_counter

Code language: Python [python]
9

Thứ hai, tạo 10 chủ đề mới và chuyển id cho mỗi chủ đề. Danh sách

def task[]: print['Starting a task...'] sleep[1] print['done']

Code language: Python [python]
15 được sử dụng để theo dõi tất cả các chủ đề mới được tạo

def task[]: print['Starting a task...'] sleep[1] print['done']

Code language: Python [python]
0

Lưu ý rằng nếu bạn gọi phương thức

def task[]: print['Starting a task...'] sleep[1] print['done']

Code language: Python [python]
10 bên trong vòng lặp, chương trình sẽ đợi luồng đầu tiên hoàn thành trước khi bắt đầu luồng tiếp theo

Thứ ba, đợi tất cả các luồng hoàn thành bằng cách gọi phương thức

def task[]: print['Starting a task...'] sleep[1] print['done']

Code language: Python [python]
10

def task[]: print['Starting a task...'] sleep[1] print['done']

Code language: Python [python]
1

Sau đây là kết quả đầu ra của chương trình

def task[]: print['Starting a task...'] sleep[1] print['done']

Code language: Python [python]
2

Nó chỉ mất 1. 05 giây để hoàn thành

Chú ý chương trình không thực hiện luồng theo thứ tự từ 1 đến 10

Khi nào nên sử dụng luồng Python

Như đã giới thiệu trong phần hướng dẫn process và thread, có 2 nhiệm vụ chính

  • Các tác vụ liên quan đến I/O – thời gian dành cho I/O nhiều hơn đáng kể so với thời gian dành cho tính toán
  • Các tác vụ liên quan đến CPU – thời gian dành cho tính toán cao hơn đáng kể so với thời gian chờ I/O

Luồng Python được tối ưu hóa cho các tác vụ ràng buộc I/O. Ví dụ: yêu cầu tài nguyên từ xa, kết nối máy chủ cơ sở dữ liệu hoặc đọc và ghi tệp

Một ví dụ luồng Python thực tế

Giả sử rằng bạn có một danh sách các tệp văn bản trong một thư mục e. g. ,

def task[]: print['Starting a task...'] sleep[1] print['done']

Code language: Python [python]
18. Và bạn muốn thay thế một văn bản bằng một văn bản mới trong tất cả các tệp

Chương trình đơn luồng sau đây cho biết cách thay thế chuỗi con bằng chuỗi con mới trong tệp văn bản

Python có tốt cho luồng không?

Không, đó không phải là ý kiến ​​hay . Đa luồng không thể thực hiện được trong Python do một thứ gọi là Khóa thông dịch viên toàn cầu.

Python vẫn còn đơn luồng?

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. Bất chấp 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 các triển khai dựa trên C dưới mui xe, cho phép sử dụng nhiều lõi.

Chủ đề Python là gì?

Các luồng trong python là một thực thể trong một quy trình có thể được lên lịch để thực hiện . Nói một cách đơn giản hơn, luồng là một quá trình tính toán được thực hiện bởi máy tính. Đó là một chuỗi các hướng dẫn như vậy trong một chương trình có thể được thực thi độc lập với các mã khác.

Làm thế nào là luồng đạt được trong Python?

Có thể đạt được đa luồng trong Python bằng cách nhập mô-đun luồng .

Chủ Đề