如何等待一个线程完成然后 运行 另一个线程

How to wait for one threading to finish then run another threading

我需要用 selenium 打开多个 chrome 驱动程序,然后通过在它们中线程化来执行我的脚本。 如何让它等到第一个线程完成后再开始第二个线程。 time.sleep(x) 对我不起作用,因为我不知道第一个线程需要多少时间,我需要第二个线程在第一个线程完成后立即开始。

import time
import threading
from selenium import webdriver


mydrivers=[]
tabs = []
class ActivePool(object):
    def __init__(self):
        super(ActivePool, self).__init__()
        self.active = []
        self.lock = threading.Lock()
    def makeActive(self, name):
        with self.lock:
            self.active.append(name)
    def makeInactive(self, name):
        with self.lock:
            self.active.remove(name)
                    
def main_worker(s):
    #Driver State
    global tabs
    global mydrivers
    mydrivers.append(webdriver.Chrome())
    tabs.append(False)

def worker(s, pool):
        with s:
            global tabs
            global mydrivers
            name = threading.currentThread().getName()
            pool.makeActive(name)
            x = tabs.index(False)
            tabs[x] = True
            mydrivers[x].get("https://whosebug.com")
            time.sleep(15)
            pool.makeInactive(name)
            tabs[x]= False   



for k in range(5):
    t = threading.Thread(target=main_worker, args=(k,))
    t.start()

# How to make it wait until above threading is finished and then start below threading

pool = ActivePool()
s = threading.Semaphore(5)
for j in range(100):
    t = threading.Thread(target=worker, name=j, args=(s, pool))
    t.start()

要等待线程完成,您应该使用 thread.join 函数。例如...

from threading import Thread
import time

def wait_sec():
    time.sleep(2)

my_thread = Thread(target=wait_sec)
my_thread.start()
# after starting the thread join it to wait for end of target
my_thread.join()
print("You have waited 2 seconds")
thds = []
for k in range(5):
    thds.append( threading.Thread(target=main_worker, args=(k,)))
for t in thds:
    t.start()
for t in thds:
    t.join()

或者,甚至:

thds = [threading.Thread(target=main_worker, args=(k,)) for k in range(5)]
for t in thds:
    t.start()
for t in thds:
    t.join()