Python tạo chủ đề

Trong bài viết này, chúng ta sẽ thảo luận về cách tạo các luồng trong python sẽ chạy một hàm [có hoặc không có đối số] song song với luồng chính

Python cung cấp một mô-đun luồng để quản lý các luồng. Để sử dụng, chúng ta cần nhập mô-đun này i. e

import threading

Bây giờ mô-đun luồng của Python cung cấp một lớp Thread để tạo và quản lý các luồng. Lớp chủ đề cung cấp một hàm tạo trong đó chúng ta có thể chuyển một thực thể có thể gọi được i. e. hàm hoặc hàm thành viên, v.v. và các đối số mà hàm đó yêu cầu trong args i. e.
______1
Để tạo các luồng, chúng ta có thể tạo các đối tượng của lớp Chủ đề này bằng cách truyền hàm mà chúng ta muốn chạy trong luồng riêng biệt. Mỗi đối tượng của lớp Thread đại diện cho một luồng và chúng ta có thể điều khiển luồng đó bằng cách gọi hàm thành viên của đối tượng luồng này.

Hãy tạo một luồng sử dụng lớp Thread bằng cách truyền một hàm có hoặc không có đối số

Tạo một chủ đề với một chức năng

Giả sử chúng ta có một chức năng in 5 dòng trong một vòng lặp và ngủ trong 1 giây sau khi in mỗi dòng i. e

'''
This function will print 5 lines in a loop and sleeps for 1 second after
printing a line.
'''
def threadFunc[]:
   for i in range[5]:
       print['Hello from new Thread ']
       time.sleep[1]

Khi được gọi, chức năng này sẽ hoàn thành sau khoảng 5 giây.

quảng cáo

Vì chức năng chính của chúng tôi chạy trong luồng chính, chúng tôi muốn tạo một luồng mới sẽ thực thi threadFunc[] song song với luồng chính.
Đối với nhu cầu mới đó, hãy tạo một đối tượng lớp Chủ đề và chuyển tên hàm [mà chúng ta muốn thực thi trong luồng mới] vào đối số mục tiêu i. e.

# Create a Thread with a function without any arguments
th = threading.Thread[target=threadFunc]

Nó sẽ tạo đối tượng lớp Thread có thể chạy hàm được cung cấp trong đối số đích trong luồng song song, nhưng luồng chưa bắt đầu. Để bắt đầu luồng, chúng ta cần gọi hàm thành viên start[] từ đối tượng luồng i. e.
______4
th. start[] sẽ bắt đầu một luồng mới, luồng này sẽ thực thi hàm threadFunc[] song song với luồng chính. Sau khi gọi hàm start[] trên đối tượng luồng, điều khiển sẽ quay lại luồng Chính và luồng mới sẽ thực thi song song với luồng Chính.

Vì vậy, cả hàm main[] và threadFunc[] sẽ chạy song song và in nhật ký song song trong khoảng 5 giây. Do đó, đầu ra của đoạn mã trên là,

Hello from new Thread 
Hi from Main Thread
Hello from new Thread 
Hi from Main Thread
Hi from Main Thread
Hello from new Thread 
Hello from new Thread 
Hi from Main Thread
Hi from Main Thread
Hello from new Thread

Cuối cùng, luồng chính sẽ đợi luồng thứ thoát ra bằng cách gọi hàm join[] trên đối tượng luồng. Cuộc gọi này đang bị chặn cho đến khi luồng được chỉ định bởi đối tượng thoát ra.

Tại sao chủ đề chính được gọi là tham gia[]?

Nếu chúng ta chưa gọi hàm join[] trong luồng chính, thì hàm main[] sẽ không đợi luồng được trỏ bởi th để kết thúc. Vì vậy, nếu hàm main[] kết thúc thì nó hoạt động trước, nó có thể thoát mà không cần luồng khác kết thúc. Do đó, gọi tham gia [] trên đối tượng luồng sẽ giảm lỗi

Ví dụ hoàn chỉnh như sau,

import threading
import time

'''
This function will print 5 lines in a loop and sleeps for 1 second after
printing a line.
'''
def threadFunc[]:
    for i in range[5]:
        print['Hello from new Thread ']
        time.sleep[1]


def main[]:

    print['**** Create a Thread with a function without any arguments ****']

    # Create a Thread with a function without any arguments
    th = threading.Thread[target=threadFunc]

    # Start the thread
    th.start[]

    # Print some messages on console
    for i in range[5]:
       print['Hi from Main Thread']
       time.sleep[1]

    # Wait for thread to finish
    th.join[]

if __name__ == '__main__':
   main[]

Đầu ra.
______7

Tạo một Chủ đề từ một hàm có đối số

Điều gì sẽ xảy ra nếu chúng ta có một hàm chấp nhận một vài đối số?. e

'''
A Dummy function that accepts 2 arguments i.e. Filename and encryption type
and sleeps for 5 seconds in a loop while printing few lines.
This is to simulate a heavey function that takes 10 seconds to complete
'''
def loadContents[fileName, encryptionType]:
    print['Started loading contents from file : ', fileName]
    print['Encryption Type : ', encryptionType]
    for i in range[5]:
       print['Loading .. ']
       time.sleep[1]
    print['Finished loading contents from file : ', fileName]

Hàm này mô phỏng một hàm nặng chấp nhận hai đối số i. e. tên tệp và loại mã hóa, sau đó thực hiện một số nội dung mất khoảng 5 giây.
Bây giờ để tạo một đối tượng luồng chạy hàm này trong luồng song song, chúng ta cần truyền các đối số của hàm dưới dạng tuple trong đối số args của hàm tạo lớp Thread i. e.
______9
Nó sẽ tạo một đối tượng luồng có thể chạy hàm đã truyền trong luồng mới song song với luồng chính. Cả hàm main[] và hàm loadContents[] sẽ chạy song song và cả hai sẽ in nhật ký song song. Do đó, đầu ra của đoạn mã trên là ,
class threading.Thread[group=None, target=None, name=None, args=[], kwargs={}, *, daemon=None]
0
Một điểm quan trọng khác là nếu chúng ta có một hàm chấp nhận một đối số thì chúng ta cần truyền bộ dữ liệu vào args .
class threading.Thread[group=None, target=None, name=None, args=[], kwargs={}, *, daemon=None]
1
Complete example is as follows,
class threading.Thread[group=None, target=None, name=None, args=[], kwargs={}, *, daemon=None]
2
Output:
class threading.Thread[group=None, target=None, name=None, args=[], kwargs={}, *, daemon=None]
3
Điểm quan trọng về Đầu ra.
Trong các ví dụ trên, cả luồng chính và luồng mới của chúng ta đều chạy song song và in thông báo trên bảng điều khiển song song. Do đó, thứ tự của các đầu ra có thể khác với các đầu ra ở trên vì bảng điều khiển là tài nguyên dùng chung được sử dụng song song bởi 2 luồng. Trong các bài viết sau, chúng tôi sẽ thảo luận về cách đồng bộ hóa một tài nguyên duy nhất giữa các luồng.

 

Hướng dẫn về Pandas -Tìm hiểu Phân tích dữ liệu với Python

 
  • Hướng dẫn Pandas Phần #1 - Giới thiệu về Phân tích dữ liệu với Python
  • Hướng dẫn Pandas Phần #2 - Khái niệm cơ bản về Pandas Series
  • Hướng dẫn Pandas Phần #3 - Nhận & Đặt giá trị chuỗi
  • Pandas Tutorial Part #4 - Thuộc tính & phương thức của Pandas Series
  • Hướng dẫn về Pandas Phần #5 - Thêm hoặc xóa các thành phần của Pandas Series
  • Hướng dẫn về Pandas Phần #6 - Giới thiệu về DataFrame
  • Hướng dẫn về Pandas Phần #7 - DataFrame. loc[] - Chọn Hàng/Cột theo Lập chỉ mục
  • Hướng dẫn về Pandas Phần #8 - DataFrame. iloc[] - Chọn Hàng/Cột theo Tên nhãn
  • Hướng dẫn về gấu trúc Phần #9 - Lọc các hàng trong khung dữ liệu
  • Hướng dẫn Pandas Phần #10 - Thêm/Xóa Hàng & Cột DataFrame
  • Hướng dẫn về Pandas Phần #11 - Các thuộc tính & phương thức DataFrame
  • Hướng dẫn Pandas Phần #12 - Xử lý dữ liệu bị thiếu hoặc giá trị NaN
  • Hướng dẫn về Pandas Phần #13 - Lặp lại các Hàng & Cột của DataFrame
  • Hướng dẫn Pandas Phần #14 - Sắp xếp DataFrame theo Hàng hoặc Cột
  • Hướng dẫn về gấu trúc Phần #15 - Hợp nhất hoặc ghép các khung dữ liệu
  • Hướng dẫn về Pandas Phần #16 - DataFrame GroupBy được giải thích bằng các ví dụ
 

Bạn đang muốn tạo dựng sự nghiệp trong Khoa học dữ liệu với Python?

Khoa học dữ liệu là tương lai và tương lai là ở đây ngay bây giờ. Các nhà khoa học dữ liệu hiện là những chuyên gia được tìm kiếm nhiều nhất hiện nay. Để trở thành một Nhà khoa học dữ liệu giỏi hoặc để chuyển đổi nghề nghiệp trong Khoa học dữ liệu, người ta phải sở hữu bộ kỹ năng phù hợp. Chúng tôi đã tuyển chọn danh sách Chứng chỉ chuyên nghiệp tốt nhất về Khoa học dữ liệu với Python. Các khóa học này sẽ dạy cho bạn các công cụ lập trình cho Khoa học dữ liệu như Pandas, NumPy, Matplotlib, Seaborn và cách sử dụng các thư viện này để triển khai các mô hình Máy học

Kiểm tra Đánh giá chi tiết về Chứng chỉ chuyên nghiệp tốt nhất về Khoa học dữ liệu với Python

Hãy nhớ rằng, Khoa học dữ liệu đòi hỏi rất nhiều kiên nhẫn, bền bỉ và thực hành. Vì vậy, hãy bắt đầu học ngay hôm nay

Chúng ta có thể tạo chủ đề bằng Python không?

Phân luồng Python cho phép bạn chạy đồng thời các phần khác nhau của chương trình và có thể đơn giản hóa thiết kế của bạn . Nếu bạn đã có một số kinh nghiệm về Python và muốn tăng tốc chương trình của mình bằng các luồng, thì hướng dẫn này là dành cho bạn.

Làm thế nào một chủ đề có thể được tạo ra trong Python đưa ra ví dụ?

Chúng tôi đã tạo một lớp con của lớp chủ đề. Sau đó, chúng tôi ghi đè chức năng __init__ của lớp chủ đề. Sau đó, chúng tôi ghi đè phương thức chạy để xác định hành vi của luồng. Phương thức start[] bắt đầu một luồng Python

Việc tạo một chuỗi Python có đắt không?

Lưu câu trả lời này. Hiển thị hoạt động trên bài đăng này. Tạo chuỗi tốn kém và ngăn xếp yêu cầu bộ nhớ. Đồng thời, nếu quy trình của bạn đang sử dụng nhiều luồng, thì việc chuyển đổi ngữ cảnh có thể làm giảm hiệu suất.

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

Tóm lại, phân luồng trong Python cho phép tạo nhiều luồng trong một quy trình duy nhất, nhưng do GIL, không có luồng nào chạy cùng một lúc. Phân luồng vẫn là một tùy chọn rất tốt khi chạy đồng thời nhiều tác vụ liên kết I/O .

Chủ Đề