Computer >> Máy Tính >  >> Lập trình >> Python

Song song dựa trên luồng trong Python

Luồng trong khoa học máy tính là một tập hợp các hướng dẫn có thể được quản lý độc lập bởi bộ lập lịch, là một phần của hệ điều hành.

Chức năng chính của Threading là chạy nhiều luồng cùng một lúc. Luồng có nghĩa là các tác vụ khác nhau, các lệnh gọi hàm trong chương trình và nhiều luồng chạy cùng lúc không có nghĩa là chúng được thực thi trên các máy khác nhau.

Đa luồng được sử dụng trong hai trường hợp.

  • Khi đầu ra của chương trình con cần kết hợp với chương trình chính.

  • Khi chương trình chính chứa các đoạn mã tương đối độc lập với nhau.

Mô-đun phân luồng

Python cung cấp mô-đun Phân luồng rất mạnh mẽ và cũng cung cấp hỗ trợ cấp cao cho các luồng.

Mô-đun phân luồng xác định rất nhiều chức năng được sử dụng để lấy dữ liệu liên quan đến luồng và các chức năng này được thực thi tự động.

threading.active_count ()

Hàm này trả về số lượng đối tượng Thread hiện đang tồn tại. Ở đây, tổng số được trả về bằng với độ dài của danh sách được trả về bởi enumerate ().

threading.current_thread ()

Hàm này trả về đối tượng Luồng hiện tại và nó tương ứng với luồng điều khiển của người gọi.

threading.get_ident ()

Hàm này trả về ‘mã định danh luồng’ của luồng hiện tại. Đây là một số nguyên khác không.

threading.enumerate ()

Hàm này trả về danh sách tất cả các đối tượng Thread hiện đang tồn tại bao gồm các luồng daemonic, hàm current_thread () tạo một luồng giả và luồng chính và loại trừ các luồng đã kết thúc và các luồng chưa được bắt đầu.

threading.main_thread ()

Hàm này trả về đối tượng Thread chính.

threading.settrace (func)

Khi tất cả các luồng được bắt đầu từ mô-đun phân luồng, hãy đặt một chức năng theo dõi. Trước khi phương thức run () được gọi, hàm này được chuyển tới sys.settrace () cho mỗi luồng.

threading.setprofile (func)

Khi tất cả các luồng được bắt đầu từ mô-đun phân luồng, hãy đặt một chức năng cấu hình. Trước khi phương thức run () được gọi, hàm này được chuyển tới sys.setprofile () cho mỗi luồng.

threading.stack_size ([size])

Hàm này trả về kích thước của ngăn xếp luồng và nó được sử dụng khi tạo luồng mới.

phân luồng.TIMEOUT_MAX

Đây là một hằng số có giá trị lớn nhất được phép cho tham số thời gian chờ của các hàm chặn (Lock.acquire (), RLock.acquire (), Condition.wait (), v.v.).

Mã mẫu

import threading
def trace_function():
   print("Passing the trace function")
   def profile():
      print("PROFILE THREAD: " + str(threading.current_thread().getName()))
      class mythread(threading.Thread):
      def __init__(self, thread_name, thread_ID):
         threading.Thread.__init__(self)
         self.thread_name = thread_name
         self.thread_ID = thread_ID
      def run(self):
         print(str(self.thread_ID));
         print("ACTIVE THREADS ARE: "+ str(threading.active_count()))
         print("CURRENT THREAD IS: " + str(threading.current_thread().getName()))
         my_thread1 = mythread("PP", 500)
         my_thread2 = mythread("PythonProgram", 1000);
         print("NAME OF THE MAIN THREAD: " + str(threading.main_thread().getName()))
         print("IDENTIFICATION OF MAIN THREAD: "+ str(threading.get_ident()))
         print("STACK SIZE = " + str(threading.stack_size()))
      print(threading.settrace(trace_function()))
   threading.setprofile(profile())
my_thread1.start()
my_thread2.start()
print("LIST OF ENUMERATION: ")
print(threading.enumerate())
print("EXIT")

Đầu ra

NAME OF THE MAIN THREAD: MainThread
IDENTIFICATION OF MAIN THREAD: 5436
STACK SIZE = 0
Passing the trace function
None
PROFILE THREAD: MainThread
500
1000LIST OF ENUMERATION: ACTIVE THREADS ARE: 6
[<_MainThread(MainThread, started 5436)>, <Thread(Thread-4, started daemon 1960)>, <Heartbeat(Thread-5, started daemon 6452)>, <HistorySavingThread(IPythonHistorySavingThread, started 4304)>, <mythread(Thread-8, started 8460)>, <mythread(Thread-9, started 4668)>]
EXIT

CURRENT THREAD IS: Thread-8

ACTIVE THREADS ARE: 5
CURRENT THREAD IS: Thread-9