2010-10-23 43 views
5

mới Khi tôi sử dụng Python thread API mọi thứ cũ hoạt động tốt:Dịch 'thread.start_new_thread (...) `đến luồng API

thread.start_new_thread(main_func, args, kwargs) 

Nhưng nếu tôi cố gắng sử dụng threading API mới quá trình , chạy thread treo khi cần thoát thân với sys.exit(3):

threading.Thread(target=main_func, args=args, kwargs=kwargs).start() 

Làm thế nào tôi có thể dịch mã để API luồng mới?

Bạn có thể xem ví dụ này trong context.

Trả lời

7

Hành vi này là do thực tế là thread.start_new_thread tạo chủ đề ở chế độ daemon trong khi threading.Thread tạo chủ đề ở chế độ non-daemon.
Để bắt đầu threading.Thread ở chế độ daemon, bạn cần sử dụng phương pháp .setDaemon:

my_thread = threading.Thread(target=main_func, args=args, kwargs=kwargs) 
my_thread.setDaemon(True) 
my_thread.start() 
2

Chương trình sẽ thoát khi tất cả các chuỗi không phải daemon đã thoát. Bạn có thể đặt số thứ tự Thread phụ bằng cách đặt thuộc tính daemon thành True.

Hoặc bạn có thể thay thế cuộc gọi của mình thành sys.exit bằng os._exit.

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