Hướng dẫn can you restart a thread in python? - bạn có thể khởi động lại một chuỗi trong python không?

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.

Lớp huyền thoại (Chủ đề
def __init__(self, threadname):
threading.Thread.__init__(self, name = threadname)

def chạy (self): in 'Tôi đang chạy' print 'Tôi bỏ chạy ()'
print 'i am running'
print 'i quit run()'

Thread = MyThread ('1') Chủ đề.start () in Threading.ActiveCount () ## 1, điều này có nghĩa là chủ đề đang hoạt động nếu không phải chủ đề. OK, điều này được thực hiện. Điều này có nghĩa là luồng không còn tồn tại.
thread.start()
print threading.activeCount() ## 1 , this means the thread is active
if not thread.isAlive():
print 'i am dead,you can restart' ### OK, this is executed. this
means the thread is no alive
thread.start() #### " thread already started "

Chương trình này trình bày rằng chuỗi thoát khỏi func * chạy () * và đang hoạt động nhưng không còn sống. Làm thế nào để hiểu điều này? Người ta nói nếu chủ đề thoát khỏi * chạy () * func, nó đã chết. Làm thế nào để khởi động lại nó?
active but not alive. How to understand this? It is said if the
thread quit the *run()* func , it's dead.
how to restart it ?

Cảm ơn

25 tháng 11 '06 #1

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

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ệ. After starting a thread, it can never be started again. If you does so, an IllegalThreadStateException is thrown. In such case, thread will run once but for second time, it will throw exception.

Tôi có thể sử dụng lại một chủ đề trong Python không?

Nếu một luồng trong nhóm luồng hoàn thành việc thực thi của nó thì chủ đề đó có thể được sử dụng lại..

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 các 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 chủ đề ..
Giết chủ đề Python bằng cách đặt nó thành Daemon ..
Sử dụng hàm ẩn _stop ().

Các chủ đề python có tự đóng lại không?

Trong khoa học máy tính, một daemon là một quá trình chạy trong nền.Python Threading có một ý nghĩa cụ thể hơn cho daemon.Một chủ đề daemon sẽ tắt ngay lập tức khi chương trình thoát ra.A daemon thread will shut down immediately when the program exits.