Tôi có một chuỗi mở rộng Thread. Mã trông giống như thế này;Python - kiểm tra trên một sợi/xóa khỏi danh sách
class MyThread(Thread):
def run(self):
# Do stuff
my_threads = []
while has_jobs() and len(my_threads) < 5:
new_thread = MyThread(next_job_details())
new_thread.run()
my_threads.append(new_thread)
for my_thread in my_threads
my_thread.join()
# Do stuff
Vì vậy, đây trong mã giả của tôi, tôi kiểm tra để xem nếu có bất kỳ công việc (như một db vv) và nếu có một số công ăn việc làm, và nếu có ít hơn 5 chủ đề hoạt động, tạo chủ đề mới. Vì vậy, từ đây, tôi kiểm tra chủ đề của tôi và đây là nơi tôi gặp khó khăn, tôi có thể sử dụng .join() nhưng sự hiểu biết của tôi là - điều này sau đó đợi cho đến khi nó kết thúc nếu chuỗi đầu tiên nó kiểm tra trong tiến trình, sau đó nó chờ cho đến khi nó được thực hiện - ngay cả khi các chủ đề khác được hoàn thành ....
vì vậy có cách nào để kiểm tra xem một luồng có được thực hiện hay không, sau đó loại bỏ nó?
ví dụ
for my_thread in my_threads:
if my_thread.done():
# process results
del (my_threads[my_thread]) ?? will that work...
Cảm ơn, nhưng điều đó có nghĩa là kết quả có thể bị mất? Nếu một chủ đề không còn tồn tại nữa thì tôi cần có kết quả. – Wizzard
Đúng vậy. Tôi đã sửa đổi câu trả lời của mình để tính đến điều này. – Arlaharen
'is_alive()' trong Python 2.6+ – trim