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 PythonHã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