Chuỗi dừng python khi thoát

Mặc dù chúng ta không thể giết các luồng trong Python, nhưng có một số kỹ thuật chúng ta có thể sử dụng để mô phỏng việc giết luồng trong Python. Đột ngột giết một luồng trong Python được coi là một cách tiếp cận lập trình kém vì chúng ta không thể giết trực tiếp luồng đó. Thay vào đó, chúng ta phải sử dụng một trong các phương thức do Python cung cấp. Các phương pháp này sẽ chấm dứt chính xác các luồng, nhưng chúng khá gần với quy trình

Tạo một chủ đề trong Python

Khi bạn chạy một chương trình, một luồng là một luồng thực thi riêng chạy trong nền của chương trình. Các luồng Python là một loại quy trình có thể được lên kế hoạch thực hiện. Nói một cách đơn giản, một luồng là một quá trình tính toán mà máy tính sẽ thực hiện. Bộ hướng dẫn của một chương trình có thể được thực hiện riêng biệt với các mã khác. Chuỗi nền không thể được chấm dứt đúng cách trong Python nhưng có các kỹ thuật khác mà chúng tôi có thể sử dụng nếu chúng tôi vẫn muốn chấm dứt chuỗi. Tuy nhiên, các phương pháp này không kết thúc luồng đúng cách; . Nhưng ở đây, trước tiên chúng tôi sẽ trình bày cách bắt đầu một chuỗi trước khi chỉ cho bạn cách dừng chuỗi đó.

Hãy thực thi mã. Đầu tiên, chúng tôi nhập thư viện “thời gian” và “luồng”. Sau đó, trong dòng tiếp theo, chúng tôi xác định hàm “func1”. Trong dòng tiếp theo, chúng tôi sử dụng vòng lặp for để bắt đầu biến “x” và đặt phạm vi cho các lần lặp của luồng. Ở đây, chúng tôi đặt phạm vi từ “1” đến “10”, nghĩa là luồng của chúng tôi sẽ dừng sau “10” lần lặp lại. Trong dòng tiếp theo, chúng tôi gọi là “thời gian. sleep(),” với khoảng thời gian là “1”. Chúng tôi đã sử dụng “thời gian. sleep()” khi chúng ta muốn trì hoãn việc thực hiện một câu lệnh

Sau đó, chúng ta gọi hàm print() bên trong hàm này. Chúng tôi đã chuyển biến “x”, trong đó số lần lặp đã được lưu trữ và cũng chuyển câu lệnh đầu vào, “đã hoàn thành các lần lặp trước khi thoát”. Khi chúng tôi đặt thời gian thành “1”, hệ thống sẽ chuyển sang chế độ ngủ cho “1” trước khi in câu lệnh in. Sau đó, trong dòng tiếp theo, chúng tôi gọi chức năng này là “func” với mô-đun “thread”. Ở đây, chúng tôi đã khởi tạo biến “t” để lưu chuỗi trong đó. Sau đó, chúng tôi sử dụng “t. start()” để bắt đầu thread. Và chúng ta gọi hàm “join()” với luồng, phương thức “join()” tạm dừng việc triển khai chương trình cho đến khi luồng đích được đọc toàn bộ

Khi luồng đã hoàn thành “10” lần lặp, hệ thống sẽ tạm dừng hoạt động trong “1” giây trước khi in cụm từ “đã hoàn thành các lần lặp trước khi thoát. ” Bây giờ, khi chúng ta gọi hàm với luồng, nó sẽ bắt đầu thực thi luồng như chúng ta đã đặt ở trên vòng lặp và phạm vi của nó là “10”

Chuỗi dừng python khi thoát

Bây giờ nó đã hiển thị tất cả các lần lặp lại của nó trong đầu ra, không thể giết luồng ở đây. Khi chúng tôi nhấp Ctrl-C sau bất kỳ số lần lặp nào, luồng sẽ tiếp tục chạy cho đến khi tất cả các lần lặp của nó hoàn tất. Chủ đề này chỉ hiểu rằng nó cần hoàn thành "10" lần lặp lại

Chuỗi dừng python khi thoát

Sử dụng Chủ đề Daemon để giết Chủ đề

Bây giờ, chúng tôi không thể giết chủ đề bằng phương pháp này. Mặc dù vậy, chúng ta có thể ngăn luồng kết thúc bằng phương pháp này bằng cách chỉ cần kết thúc quá trình thực thi của nó sau một khoảng thời gian đã đặt, luồng không bị dừng trong phần phụ trợ. Các luồng chạy nền liên tục hỗ trợ các luồng chính hoặc không phải daemon bằng cách chạy ở nền trước được gọi là các luồng daemon. Chuỗi trình nền chạy trong nền không ngăn chuỗi chết

Hãy bắt đầu mã bằng cách nhập ba thư viện. "luồng" là đầu tiên, tiếp theo là "thời gian" và "sys" tương ứng. Nhiều phương thức và biến trong gói Python sys có thể được sử dụng để thay đổi các thành phần khác nhau của hệ điều hành Python. Có thể làm việc trên trình thông dịch nhờ khả năng tiếp cận các hằng số và phương thức có kết nối chặt chẽ với trình thông dịch. Sau khi tạo một hàm có tên “func”, chúng tôi đã sử dụng điều kiện “trong khi đúng” để hoạt động có điều kiện cho đến khi câu lệnh được thực thi bên trong vòng lặp

Sau đó, ở dòng tiếp theo, chúng ta sử dụng hàm “print()” để in cụm từ, “Luồng đang hoạt động nhưng sẽ biến mất khi chương trình kết thúc,” sau khi chuyển thời gian “1” giây vào “thời gian. chức năng ngủ()”. Như chúng ta đã sử dụng “thời gian. sleep()” ở trên để đặt thời gian thành “1” giây, câu lệnh bây giờ sẽ chuyển sang chế độ ngủ trong một giây trước khi xuất phương thức này. Sau đó, trong dòng tiếp theo, chúng tôi sử dụng trình nền và thuộc tính của nó thành “true” để cho phép chúng tôi chấm dứt chuỗi của mình sau một khoảng thời gian định trước

Hiện tại, chúng tôi đang tạo một luồng bằng cách sử dụng “luồng. luồng” và sử dụng “đích=func” để gọi hàm trong luồng. Bây giờ chúng ta đã sử dụng “t. start()” để bắt đầu chủ đề của chúng tôi, chúng tôi đã gọi là “sys. exit (), sẽ khiến hệ thống đưa ra ngoại lệ thoát hệ thống. Vì vậy, những gì mã này thực sự làm là hiển thị câu lệnh in đã được lưu trong hàm “func” khi luồng gọi nó nhưng nó trì hoãn việc in câu lệnh trong “1” giây vì chúng tôi đã sử dụng “thời gian. ngủ(). ”

Chuỗi dừng python khi thoát

Như bạn có thể thấy, chuỗi hiện đang chạy, nhưng khi nó sắp hoàn thành lần lặp thứ tám, chúng tôi đã nhấn Ctrl-C, thao tác này ngay lập tức dừng việc kết thúc chuỗi. Về cơ bản, điều này có nghĩa là bằng cách sử dụng luồng daemon, chúng tôi không thể thực sự tắt luồng đó, chỉ có thể ngăn nó chạy. Đây không phải là cách hiệu quả nhất để kết thúc chủ đề;

Chuỗi dừng python khi thoát

Vì không thể buộc chuỗi kết thúc bằng cách ngắt chuỗi bằng bàn phím, nên chúng tôi hiện đang sử dụng đối tượng sự kiện python trong tập lệnh tiếp theo. Điều này sẽ khiến luồng tự dừng. Chúng tôi không cần nhấn bất kỳ phím nào để ngăn nó kết thúc. Đối tượng sự kiện này được cung cấp trong mô-đun luồng. Nó có hai phương thức được chỉ định. đặt() và không đặt()

Hãy bắt đầu bằng cách triển khai mã bằng cách nhập các gói "tín hiệu", "luồng" và "thời gian". Sau đó, dòng tiếp theo sử dụng “luồng. event()” để gọi sự kiện của luồng. Sau đó, trong dòng tiếp theo, chúng ta sử dụng hàm print() và bên trong nó, chúng ta gọi câu lệnh đầu vào bằng cách chuyển đối số “I of 20 iterations. ” Chúng tôi đang in giá trị của “I” trong biến “f”, là giá trị của “20” lần lặp. Sau đó, trong dòng tiếp theo, chúng tôi sử dụng vòng lặp for và bên trong nó, chúng tôi tạo biến “I” và đặt phạm vi thành “1” đến “20”. Sau đó, chúng tôi đã sử dụng điều kiện “nếu”, đó là nếu thoát. biến cố. được set() nó phá vỡ vòng lặp, điều đó có nghĩa là nếu sự kiện được set() thì phương thức kết thúc. Chúng tôi đang sử dụng hàm print() để in câu lệnh “các lần lặp đã hoàn thành trước khi thoát” và in giá trị “I” trong biến “f”. Chúng tôi đã sử dụng điều kiện “nếu” đó là nếu thoát. biến cố. được đặt () sau đó ngắt vòng lặp

Tiếp theo, chúng tôi đã tạo một hàm mới có tên là "trình xử lý tín hiệu" mà chúng tôi đã chuyển các biến "signum" và "frame" cho hàm đó. Sau khi sử dụng exit_event. set(), chúng tôi gọi các chức năng này là “bộ xử lý tín hiệu” với tín hiệu. tín hiệu và chức năng "func" với "luồng. chủ đề, tương ứng. Cuối cùng, chúng tôi đã sử dụng hàm join() để kết nối hai hàm

Chuỗi dừng python khi thoát

Như bạn có thể thấy trong phần hiển thị kết quả, chúng tôi đặt phạm vi thành “20”, điều này cho biết rằng quá trình tính toán sẽ kết thúc sau 20 lần lặp, nhưng trong trường hợp này, nó đã kết thúc sau năm lần lặp mặc dù chúng tôi không nhấp vào bất kỳ phím ngắt bàn phím nào. Điều này chỉ ra rằng luồng không bị giết mà bị chấm dứt, điều này có lợi cho việc trình bày

Chuỗi dừng python khi thoát

Phần kết luận

Trong bài viết này, chúng ta đã thảo luận về cách hủy một chuỗi trong Python, tuy nhiên, chúng tôi phát hiện ra rằng mặc dù có thể tạm dừng quá trình thực thi của một chuỗi sau một số lần lặp nhất định, nhưng chúng ta không thể hủy một chuỗi trong Python. Trước tiên, chúng tôi tạo một luồng và sau đó sử dụng luồng daemon để giết nó. Mặc dù vậy, chúng tôi nhận thấy rằng trong khi sử dụng mô-đun này, chúng tôi có thể dừng ngay việc thực thi của chuỗi bằng cách nhập Ctrl-c và chuỗi sẽ không bị hủy. Chuỗi sẽ bị dừng ngay lập tức sau một lượng thực thi nhất định khi chúng tôi sử dụng các đối tượng sự kiện Python, điều này rất hữu ích