как проверить, какой поток возвращает результат первым - PullRequest
1 голос
/ 08 марта 2020

Я работаю в python, и мне нужно проверить, какой поток возвращает значение первым или, другими словами, какой поток останавливается первым, мне нужно знать, есть ли встроенная функция для этого

ниже код моей темы

t6 = threading.Thread(target=dawnNewsCrawl,args=(dawnThreadReturn[1],))
t7 = threading.Thread(target=geoNewsCrawl,args=(geoThreadReturn[1],))
t8 = threading.Thread(target=aryNewsCrawl,args=(aryThreadReturn[1],))
t9 = threading.Thread(target=samaaNewsCrawl,args=(samaaThreadReturn[1],))
t10 = threading.Thread(target=dailyTimesNewsCrawl,args=(dailyTimesThreadReturn[1],))

thread6 = t6.start()
thread7 = t7.start()
thread8 = t8.start()
thread9 = t9.start()
thread10 = t10.start()

t6.join()
t7.join()
t8.join()
t9.join()
t10.join()

1 Ответ

1 голос
/ 08 марта 2020

Если вы пытаетесь выяснить это для управления потоками, вам следует рассмотреть возможность использования пула потоков. Если это не соответствует вашим требованиям, вы можете использовать метод is_alive в потоке. Пожалуйста, проверьте код ниже, чтобы понять использование метода is_alive. Он идентифицирует, как только поток выполняется.

import threading
import random
import time


def sleep(tid):
    sec = random.randint(1, 10)
    print("ID:{} sleep: {}".format(tid, sec))
    time.sleep(sec)
    print("ID:{} Done".format(tid))


threads = []
for i in range(5):
    t = threading.Thread(target=sleep, args=(i + 1,))
    threads.append(t)

for thread in threads:
    thread.start()

cnt = 5
i = 0
completed = set()
while cnt:
    i %= 5
    if i in completed or threads[i].is_alive():
        i += 1
        continue
    print("Thread: {} completed".format(i + 1))
    completed.add(i)
    i += 1
    cnt -= 1
...