2010-05-12 39 views
6

Tôi có một chuỗi được thực hiện khi một số hành động xảy ra. Với logic của chương trình, luồng không thể khởi động được trong khi một thể hiện khác của nó vẫn đang chạy. Tuy nhiên, khi tôi gọi nó lần thứ hai, tôi nhận được một lỗi "RuntimeError: thread đã bắt đầu". Tôi đã thêm một kiểm tra để xem nó có thực sự còn sống hay không bằng cách sử dụng hàm Thread.is_alive(), và nó thực sự đã chết.Chủ đề chấm dứt Python không thể khởi động lại

Tôi đang làm gì sai?

Tôi có thể cung cấp thêm chi tiết khi cần.

Trả lời

11

Không thể khởi động lại chủ đề. Bạn phải tạo lại Thread để bắt đầu lại nó.

2

Bạn có thể thử thiết

thread._Thread__started = False 

Nó không phải là chính thức ghi nhận, vì vậy sử dụng nó trên nguy cơ của riêng bạn! :)

+0

Tôi đã sử dụng _Thread__stop() để bắt đầu ... Thêm một hình như không quá tệ, nhưng làm cho chương trình của tôi thực sự bị hack ... – bfrguci

6

Từ tài liệu Python: start() bắt đầu hoạt động của luồng. Điều này phải được gọi tối đa một lần cho mỗi đối tượng chuỗi. Nó sắp xếp phương thức run() của đối tượng để được gọi trong một luồng điều khiển riêng biệt.

Nếu bạn lấy được một lớp từ luồng.Thread bạn có thể thêm Thread.__init__(self) vào cuối phương thức chạy và bạn sẽ có thể gọi lại bắt đầu và nó sẽ tự động khởi động lại khi hoàn tất.

Các vấn đề liên quan