Python多线程硒单击



我有一个长代码,它允许我使用selenium从三个不同的独立网站上抓取动态表(在抓取之前需要多次点击svg对象才能获得我需要的详细信息(。我一直在尝试使用python线程来同时抓取每个网站,以加快这个过程。我尝试了以下操作:

from time import sleep, perf_counter
from threading import Thread
start_time = perf_counter()
threads = []
# create three new threads
t1 = Thread(target=task1)
threads.append(t1)
t2 = Thread(target=task2)
threads.append(t2)
t3 = Thread(target=task3)
threads.append(t3)
# start the threads
for t in threads:
t.start()
# wait for the threads to complete
for thread in threads:
thread.join()
end_time = perf_counter()
print(f'It took {end_time- start_time: 0.0f} second(s) to complete.')

仅供参考,上面的任务1、任务2、任务3分别代表一个不同的网站。

虽然上面的代码不会中断(即,它打开三个网站并开始点击和抓取每个网站(,但任务1通常会先点击完成,然后抓取,当它完成时,任务2和任务3也会突然停止点击,也只是抓取(所以在抓取之前并没有捕获所有细节(,这不是我想要的。

我对thread.join()的理解是,在所有线程都完成运行之前,每个线程都不会完成,并且每个线程彼此独立。当所有线程同时完成时,当任务1的点击完成时,任务2和任务3的svj对象上的点击就会被缩短

在应用pythonthreading之前没有发生这种情况,所以我不确定是什么原因导致了这个问题,以及是否有解决方案?

提前感谢

thread.join()是等待,直到线程完成他的作业并将其删除以释放空间。

所以基本的循环是工作,而不是像你想的那样。

这部分代码之后:

for t in threads:
t.start()

当第一个线程完成时,您将转到以下部分:

for thread in threads:
thread.join()

在这里,循环使用所有三个线程执行thread.join()

t1.join()
t2.join()
t3.join()

排成一排。

我认为,你可以不使用循环,而是像我上面做的那样,把代码写成一行:

t1.join()
t2.join()
t3.join()

最新更新