Bạn có thể dừng một chuỗi trong python không?
Đây là một trong những câu hỏi thường gặp nhất trong Python. Vì vậy, trong bài viết này, chúng tôi sẽ giải quyết vấn đề này và đảm bảo bạn hiểu rõ về chủ đề này. Trước khi trực tiếp đi sâu vào chủ đề, chúng ta sẽ xem xét ngắn gọn về chuỗi và sau đó chuyển sang câu hỏi quan trọng về sứ mệnh của chúng ta. Vì vậy, không chậm trễ hơn nữa, hãy để các trò chơi bắt đầu. ? Show
Giới thiệuCái gì là Chủ đề ? Theo Wikipedia, trong khoa học máy tính, luồng thực thi là chuỗi hướng dẫn được lập trình nhỏ nhất có thể được quản lý độc lập bởi bộ lập lịch biểu, thường là một phần của hệ điều hành ➽ Nhiều luồng có thể chạy đồng thời trong một chương trình. Ví dụ: trong trình xử lý văn bản, luồng nền có thể được sử dụng để kiểm tra chính tả trong khi luồng nền trước có thể được sử dụng để xử lý đầu vào của người dùng (tổ hợp phím), trong khi luồng thứ ba có thể được sử dụng để tải hình ảnh từ ổ cứng và một
Ghi chú. Luồng trong Python tự nó là một chủ đề thảo luận. Mục đích của phần giới thiệu này là để bạn làm quen với ý tưởng về chủ đề. Chúng tôi khuyên bạn nên có một số hiểu biết về luồng trong Python trước khi đi sâu vào chủ đề giết luồng ➥ Khi nào chúng ta sử dụng Threading trong Python? Các luồng trong Python được sử dụng trong các tình huống khi việc thực thi một tác vụ hoặc lệnh gọi hàm liên quan đến việc chờ đợi. Một ví dụ có thể là tương tác với dịch vụ được lưu trữ trên máy chủ web. Do đó, luồng cho phép Python thực thi mã khác trong khi chờ đợi. ➥ Ví dụ import threading import time print("Printing values from 90 to 100: ") def loop_thread(): for t in range(90, 101): time.sleep(1) print(t) threading.Thread(target=loop_thread).start() đầu ra Printing values from 90 to 100: 90 91 92 93 94 95 96 97 98 99 100 Bây giờ chúng ta đã có cái nhìn tổng quan về các chủ đề, chúng ta hãy đi sâu vào câu hỏi quan trọng về nhiệm vụ của chúng ta Các cách Tắt một luồng Bằng PythonNói một cách đơn giản, giết một luồng đột ngột là một cách làm rất tồi trừ khi thực sự cần thiết. Phải nói rằng, bạn có thể muốn giết một luồng sau một khoảng thời gian nhất định hoặc sau một số lần ngắt. Vì vậy, thay vì đóng nó một cách cưỡng bức, bạn có thể vui lòng yêu cầu chuỗi đó biến mất sau khi đảm bảo dọn dẹp đúng cách, điều đó có nghĩa là
Hãy để chúng tôi hiểu nhiều cách giúp chúng tôi làm điều đó Phương pháp 1. Tạo một Cờ yêu cầu thoátNếu bạn là người quản lý các luồng của riêng mình, một cách hay để xử lý việc chấm dứt luồng là tạo một cờ thoát mà mỗi luồng sẽ kiểm tra định kỳ để biết liệu đã đến lúc thoát chưa Thí dụ import threading import time def thread_foo(stop): while True: print("THREAD STILL RUNNING!") if exit_flag: break exit_flag = False t = threading.Thread(target = thread_foo, args =(lambda : exit_flag, )) t.start() time.sleep(0.1) print('Done sleeping! Time to stop the threads.') exit_flag = True t.join() print('THREAD TERMINATED!') đầu ra Trong ví dụ trên, chúng ta đã tạo một hàm tiếp tục thực thi luồng cho đến khi chương trình gặp biến Printing values from 90 to 100: 90 91 92 93 94 95 96 97 98 99 1002. Ngay khi điều đó xảy ra, luồng có thể bị hủy bằng phương pháp Printing values from 90 to 100: 90 91 92 93 94 95 96 97 98 99 1003 ➥ Lưu ý. Printing values from 90 to 100: 90 91 92 93 94 95 96 97 98 99 1004 khiến luồng chính chờ luồng của bạn hoàn tất thực thi. Nói cách khác, Printing values from 90 to 100: 90 91 92 93 94 95 96 97 98 99 1004 hoạt động như một “hold” trên luồng chính. Nó đảm bảo rằng luồng của bạn đã hoàn thành việc thực thi trước khi luồng chính có thể di chuyển về phía trước. Theo một cách nào đó, nó đảm bảo chấm dứt chủ đề của bạn sạch sẽ và đúng cách. Phương pháp 2. Sử dụng Mô-đun đa xử lýNhư đã nêu trong tài liệu Python, import threading import time def thread_foo(stop): while True: print("THREAD STILL RUNNING!") if exit_flag: break exit_flag = False t = threading.Thread(target = thread_foo, args =(lambda : exit_flag, )) t.start() time.sleep(0.1) print('Done sleeping! Time to stop the threads.') exit_flag = True t.join() print('THREAD TERMINATED!')4 là một gói hỗ trợ các quy trình sinh sản bằng API tương tự như mô-đun Printing values from 90 to 100: 90 91 92 93 94 95 96 97 98 99 1007. Ngoài ra, việc hủy một quy trình an toàn hơn nhiều so với việc hủy một luồng vì các luồng chia sẻ các biến toàn cục và có sự phụ thuộc, trong khi các quy trình hoàn toàn độc lập và tồn tại tách biệt với nhau. Mô-đun import threading import time def thread_foo(stop): while True: print("THREAD STILL RUNNING!") if exit_flag: break exit_flag = False t = threading.Thread(target = thread_foo, args =(lambda : exit_flag, )) t.start() time.sleep(0.1) print('Done sleeping! Time to stop the threads.') exit_flag = True t.join() print('THREAD TERMINATED!')4 có chức năng Printing values from 90 to 100: 90 91 92 93 94 95 96 97 98 99 1009 được sử dụng để giết một tiến trình Chúng ta hãy xem ví dụ sau được đưa ra bên dưới để hiểu cách chúng ta có thể sử dụng mô-đun import threading import time def thread_foo(stop): while True: print("THREAD STILL RUNNING!") if exit_flag: break exit_flag = False t = threading.Thread(target = thread_foo, args =(lambda : exit_flag, )) t.start() time.sleep(0.1) print('Done sleeping! Time to stop the threads.') exit_flag = True t.join() print('THREAD TERMINATED!')4 để hủy quy trình import multiprocessing import time def Child_process(): while True: for i in range (20): print ('Process: ', i) time.sleep(0.05) t = multiprocessing.Process(target = Child_process) t.start() time.sleep(0.5) t.terminate() print("Child Process successfully terminated") đầu ra Printing values from 90 to 100: 90 91 92 93 94 95 96 97 98 99 1000 Trong ví dụ trên sau 0. 5 giây việc thực thi của import threading import time def thread_foo(stop): while True: print("THREAD STILL RUNNING!") if exit_flag: break exit_flag = False t = threading.Thread(target = thread_foo, args =(lambda : exit_flag, )) t.start() time.sleep(0.1) print('Done sleeping! Time to stop the threads.') exit_flag = True t.join() print('THREAD TERMINATED!')1 đã bị chấm dứt bằng cách sử dụng hàm import threading import time def thread_foo(stop): while True: print("THREAD STILL RUNNING!") if exit_flag: break exit_flag = False t = threading.Thread(target = thread_foo, args =(lambda : exit_flag, )) t.start() time.sleep(0.1) print('Done sleeping! Time to stop the threads.') exit_flag = True t.join() print('THREAD TERMINATED!')2 Phương pháp 3. Sử dụng Mô-đun theo dõiMột cách tiếp cận khác để giết một luồng là cài đặt Printing values from 90 to 100: 90 91 92 93 94 95 96 97 98 99 1000 vào luồng sẽ thoát khỏi luồng. Mô-đun được cung cấp bên dưới cho phép bạn hủy các chủ đề. Lớp import threading import time def thread_foo(stop): while True: print("THREAD STILL RUNNING!") if exit_flag: break exit_flag = False t = threading.Thread(target = thread_foo, args =(lambda : exit_flag, )) t.start() time.sleep(0.1) print('Done sleeping! Time to stop the threads.') exit_flag = True t.join() print('THREAD TERMINATED!')4 là sự thay thế tạm thời cho import threading import time def thread_foo(stop): while True: print("THREAD STILL RUNNING!") if exit_flag: break exit_flag = False t = threading.Thread(target = thread_foo, args =(lambda : exit_flag, )) t.start() time.sleep(0.1) print('Done sleeping! Time to stop the threads.') exit_flag = True t.join() print('THREAD TERMINATED!')5. Nó thêm phương thức import threading import time def thread_foo(stop): while True: print("THREAD STILL RUNNING!") if exit_flag: break exit_flag = False t = threading.Thread(target = thread_foo, args =(lambda : exit_flag, )) t.start() time.sleep(0.1) print('Done sleeping! Time to stop the threads.') exit_flag = True t.join() print('THREAD TERMINATED!')6, phương thức này sẽ dừng hầu hết các luồng trong đường đi của chúng Tuyên bố từ chối trách nhiệm. Quy trình đưa ra dưới đây đã được lấy từ tài nguyên sau. Tắt chuỗi trong Python KThread. py. Một triển khai Chủ đề có thể giết được Printing values from 90 to 100: 90 91 92 93 94 95 96 97 98 99 1007 đầu ra Printing values from 90 to 100: 90 91 92 93 94 95 96 97 98 99 1008 Phương pháp 4. Sử dụng ctypes Để tăng ngoại lệ trong chuỗiTrong trường hợp khi bạn cần phải giết một luồng một cách cưỡng bức, ví dụ, trong khi gói một thư viện bên ngoài đang bận cho các cuộc gọi dài và bạn muốn làm gián đoạn nó, bạn có thể sử dụng raise_exc() để đưa ra một ngoại lệ tùy ý hoặc gọi term() tới . Nó sử dụng hàm PyThreadState_SetAsyncExc chưa được hiển thị (thông qua ctypes) để đưa ra một ngoại lệ trong ngữ cảnh của chuỗi đã cho. Đoạn mã sau cho phép (với một số hạn chế) đưa ra Ngoại lệ trong chuỗi Python Thí dụ Printing values from 90 to 100: 90 91 92 93 94 95 96 97 98 99 1009 đầu ra import threading import time def thread_foo(stop): while True: print("THREAD STILL RUNNING!") if exit_flag: break exit_flag = False t = threading.Thread(target = thread_foo, args =(lambda : exit_flag, )) t.start() time.sleep(0.1) print('Done sleeping! Time to stop the threads.') exit_flag = True t.join() print('THREAD TERMINATED!')0 Sự kết luậnNhững điểm chính rút ra từ bài viết này là
Hãy đăng ký và theo dõi để có nhiều bài viết thú vị hơn Người giới thiệu
hài hước mọt sáchỒ vâng, tôi thậm chí còn không biết họ đã đổi tên nó thành Tháp Willis vào năm 2009, bởi vì tôi biết một chút về các tòa nhà chọc trời. — xkcd (nguồn)Đi đâu từ đây?Đủ lý thuyết. Hãy thực hành một số Các lập trình viên được trả sáu con số trở lên vì họ có thể giải quyết vấn đề hiệu quả hơn bằng cách sử dụng trí thông minh máy móc và tự động hóa Để trở nên thành công hơn trong việc viết mã, hãy giải quyết nhiều vấn đề thực tế hơn cho người thực. Đó là cách bạn trau dồi những kỹ năng bạn thực sự cần trong thực tế. Rốt cuộc, việc sử dụng lý thuyết học tập mà không ai cần là gì? Bạn xây dựng các kỹ năng mã hóa có giá trị cao bằng cách làm việc trên các dự án mã hóa thực tế Bạn có muốn ngừng học với các dự án đồ chơi và tập trung vào các dự án mã thực tế giúp bạn kiếm tiền và giải quyết các vấn đề thực sự cho mọi người không? 🚀 Nếu câu trả lời của bạn là CÓ. , cân nhắc trở thành nhà phát triển Python tự do. Đó là cách tốt nhất để tiếp cận nhiệm vụ cải thiện kỹ năng Python của bạn—ngay cả khi bạn là người hoàn toàn mới bắt đầu Nếu bạn chỉ muốn tìm hiểu về cơ hội làm việc tự do, vui lòng xem hội thảo trên web miễn phí của tôi “Cách xây dựng kỹ năng Python có thu nhập cao của bạn” và tìm hiểu cách tôi phát triển công việc viết mã của mình trực tuyến cũng như cách bạn có thể làm được—từ sự thoải mái của bạn Tham gia hội thảo trên web miễn phí ngay bây giờ Shubham Sayon Tôi là một người tạo nội dung và Blogger Python chuyên nghiệp. Tôi đã xuất bản nhiều bài báo và tạo các khóa học trong một khoảng thời gian. Hiện tại tôi đang làm việc với tư cách là một freelancer toàn thời gian và tôi có kinh nghiệm trong các lĩnh vực như Python, AWS, DevOps và Networking Bạn có thể giết một chuỗi Python không?Một luồng Python có thể bị hủy bằng cách hủy tiến trình mẹ của nó bên ngoài chương trình . Điều này có thể đạt được bằng cách gửi tín hiệu đến quy trình gốc.
Bạn có thể tạm dừng một chuỗi trong Python không?Bạn có thể tạm dừng chủ đề Python không? . Khi đối tượng luồng gọi phương thức bắt đầu, nó chỉ có thể đợi cho đến khi chức năng phương thức tương ứng hoàn thành. the module does not provide methods for suspending, resuming and stopping threads. Once the thread object calls the start method, it can only wait until the corresponding method function is completed. |