Hướng dẫn how to restart thread in python - làm thế nào để khởi động lại chủ đề trong python

Không có lý do để để chủ đề của bạn chết.

Nếu họ thực sự gặp sự cố, toàn bộ chương trình của bạn sẽ bị sập.

Nếu chúng chỉ nêu ra các ngoại lệ, bạn có thể bắt được các ngoại lệ.

Nếu họ trở lại bình thường, bạn không thể làm điều đó.

Bạn thậm chí có thể kết thúc một chức năng chủ đề để tự khởi động lại ngoại lệ hoặc trả về:

def threadwrap(threadfunc):
    def wrapper():
        while True:
            try:
                threadfunc()
            except BaseException as e:
                print('{!r}; restarting thread'.format(e))
            else:
                print('exited normally, bad thread; restarting')
    return wrapper

thread_dict = {
    'a': threading.Thread(target=wrapper(a), name='a'),
    'b': threading.Thread(target=wrapper(b), name='b')
}    

Vấn đề đã được giải quyết.


Bạn không thể khởi động lại một chủ đề.

Hầu hết các nền tảng không có cách nào để làm như vậy.

Và về mặt khái niệm, nó không có ý nghĩa gì. Khi một chủ đề kết thúc, ngăn xếp của nó đã chết; Cha mẹ của nó được gắn cờ hoặc báo hiệu; Khi nó được tham gia, tài nguyên của nó bị phá hủy (bao gồm các tài nguyên cấp kernel như mục nhập bảng quy trình của nó). Cách duy nhất để khởi động lại nó là tạo ra một bộ hoàn toàn mới của mọi thứ. Mà bạn đã có thể làm bằng cách tạo một chủ đề mới.

Vì vậy, chỉ cần làm điều đó. Nếu bạn thực sự không muốn xử lý các ngoại lệ trong nội bộ, chỉ cần lưu trữ các đối số xây dựng và sử dụng chúng để bắt đầu một chủ đề mới.

Bạn thậm chí có thể tạo lớp con của riêng bạn treo trên chúng cho bạn:

class RestartableThread(threading.Thread):
    def __init__(self, *args, **kwargs):
        self._args, self._kwargs = args, kwargs
        super().__init__(*args, **kwargs)
    def clone(self):
        return RestartableThread(*self._args, **self._kwargs)

Và bây giờ thật dễ dàng để "sao chép" chuỗi (với ngữ nghĩa bạn muốn):

if not a_thread.is_alive():
    a_thread = a_thread.clone()

Có, các đối tượng threading.Thread không an toàn để sao chép

Bạn mong đợi điều gì sẽ xảy ra? Tốt nhất, bạn sẽ nhận được một trình bao bọc khác xung quanh cùng một đối tượng chủ đề cấp độ OS đang làm.

Python làm thế nào để khởi động lại luồng với các ví dụ mã

Trong bài viết này, giải pháp của Python Cách khởi động lại luồng sẽ được thể hiện bằng cách sử dụng các ví dụ từ ngôn ngữ lập trình.

# You can not restart a thread in python
# However you can make sure it stays alive forever
# If threads ending is a problem just loop them forever
# Example:
import threading
import time
class mythreader(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        self.setDaemon(True)
        self.running = True
        self.start()
    def run(self):
        mycounter = 0
        while self.running:
			do_some_cool_stuff()
            time.sleep(2)

Chúng tôi đã có thể khắc phục Python cách khởi động lại vấn đề về luồng bằng cách xem xét một số ví dụ khác nhau.

Làm cách nào để dừng một chủ đề và bắt đầu lại bằng Python?

Bạn thực sự không thể dừng và sau đó khởi động lại một luồng vì bạn không thể gọi lại phương thức start () của nó sau khi phương thức chạy () đã chấm dứt. Tuy nhiên, bạn có thể tạm dừng và sau đó tiếp tục thực hiện bằng cách sử dụng luồng. Biến điều kiện để tránh các vấn đề đồng thời khi kiểm tra hoặc thay đổi trạng thái chạy của nó.31-Mar-2013

Làm thế nào để bạn xóa một chủ đề trong Python?

Có các phương pháp khác nhau mà bạn có thể giết một chủ đề trong Python.

  • Tăng ngoại lệ trong một chủ đề Python.
  • Đặt/đặt lại cờ dừng.
  • Sử dụng dấu vết để tiêu diệt chủ đề.
  • Sử dụng mô -đun đa xử lý để tiêu diệt các luồng.
  • Giết chủ đề Python bằng cách đặt nó thành daemon.
  • Sử dụng hàm ẩn _stop ()

Chúng ta có thể bắt đầu một chủ đề hai lần trong Python không?

Không. Sau khi bắt đầu một chủ đề, nó không bao giờ có thể được bắt đầu lại. Nếu bạn làm như vậy, một bất hợp phápTreadStateException bị ném. Trong trường hợp như vậy, luồng sẽ chạy một lần nhưng lần thứ hai, nó sẽ ném ngoại lệ.

Làm thế nào để bạn thoát một chủ đề?

Để kết thúc chủ đề, chỉ cần quay lại từ chức năng đó. Theo điều này, bạn cũng có thể gọi chủ đề. Thoát (), sẽ ném một ngoại lệ sẽ kết thúc chủ đề một cách âm thầm. chủ đề.

Làm thế nào để bạn khởi động lại một chủ đề?

Gọi hàm start () trên một luồng bị chấm dứt sẽ dẫn đến RunTimeError cho biết các luồng chỉ có thể được bắt đầu một lần. Thay vào đó, để khởi động lại một luồng trong Python, bạn phải tạo một thể hiện mới của luồng với cùng một cấu hình và sau đó gọi hàm start () function.06-mar-2022

Bạn có thể tạm dừng một python chủ đề?

Chúng ta đều biết rằng mô-đun luồng có thể triển khai đa luồng trong Python, nhưng mô-đun không cung cấp các phương thức để đình chỉ, tiếp tục và dừng các luồng. Khi đối tượng luồng gọi phương thức bắt đầu, nó chỉ có thể đợi cho đến khi hàm phương thức tương ứng được hoàn thành.

Làm cách nào để làm gián đoạn chủ đề chính trong Python?

Chủ đề chính có thể bị gián đoạn thông qua _Thread. Chức năng ngắt_main (). Mô phỏng ảnh hưởng của tín hiệu đến trong luồng chính. Chức năng này có thể được gọi từ một luồng khác theo mặc định sẽ tăng tín hiệu.04-may-2022

Làm thế nào để bạn dừng thực hiện Python?

Để dừng thực thi mã trong Python, trước tiên bạn cần nhập đối tượng SYS. Sau đó, bạn có thể gọi phương thức EXIT () để dừng chương trình đang chạy. Đó là cách đáng tin cậy nhất, đa nền tảng để dừng thực thi mã.

Làm thế nào để bạn kết thúc một kịch bản Python?

Ctrl + C trên Windows có thể được sử dụng để chấm dứt các tập lệnh Python và Ctrl + Z trên UNIX sẽ đình chỉ (đóng băng) việc thực thi các tập lệnh Python. Nếu bạn nhấn Ctrl + C trong khi tập lệnh đang chạy trong bảng điều khiển, tập lệnh sẽ kết thúc và tăng ngoại lệ.14-Dec-2021

Tại sao chúng ta không thể bắt đầu chủ đề hai lần?

Theo vòng đời của Thread Life, một khi chủ đề là 'chết', bạn không thể khởi động lại nó.Bạn chỉ có thể bắt đầu phương thức Gọi luồng mới ().Chủ đề có thể được mua để chạy State từ Runnable State không phải từ State Dead.18-tháng 4 năm 2010