记录Python的一种多线程使用方法
示例代码
def pocThread(url_list, thread):
print(f"线程数:{thread}")
threads = [] # 用于存放所有子线程
for url in url_list:
while threading.active_count() > thread:
for t in threads:
if not t.is_alive():
threads.remove(t) # 检测到线程结束后移除threads
break
# 创建并启动新线程
t = threading.Thread(target=poc, args=(url,))
t.start()
threads.append(t)
# 等待所有线程完成
for t in threads:
t.join()
这段代码的主要目的是使用多线程来运行一个名为poc的函数,每个线程都会对url_list中的一个URL运行这个函数。
-
print(f"线程数:{thread}"):这行代码打印出设置的最大线程数。 -
threads = []:这行代码创建了一个空列表,用于存放所有创建的线程。 -
for url in url_list:这行代码开始一个循环,对url_list中的每个URL都运行一次循环体的代码。 -
while threading.active_count() > thread:这行代码开始一个循环,只有当当前活动的线程数大于设置的最大线程数时,才会运行循环体的代码。这个循环用于控制同时运行的线程数不超过设置的最大线程数。 -
for t in threads:这行代码开始一个循环,对threads列表中的每个线程都运行一次循环体的代码。 -
if not t.is_alive():这行代码检查线程t是否还在运行。如果线程t已经完成了它的任务并停止了,is_alive()会返回False,not t.is_alive()就会是True,所以这个if语句的条件就会满足。 -
threads.remove(t):这行代码会在if语句的条件满足时被执行,它会从threads列表中移除线程t。这样做的目的是保持threads列表只包含还在运行的线程。 -
t = threading.Thread(target=poc, args=(url,)):这行代码创建了一个新的线程,这个线程的任务是运行poc函数,函数的参数是当前循环的URL。 -
t.start():这行代码启动了新创建的线程。 -
threads.append(t):这行代码将新创建的线程添加到threads列表中。 -
for t in threads::这行代码开始一个循环,对threads列表中的每个线程都运行一次循环体的代码。 -
t.join():这行代码会等待线程t完成。如果线程t还在运行,join()会阻塞,直到线程t完成。这样做的目的是确保主线程(也就是运行这段代码的线程)在所有子线程都完成后再结束。
本文详细介绍了如何使用Python的threading模块实现一个多线程任务,通过控制线程池大小,确保在给定最大线程数的情况下,对url_list中的URL逐一执行poc函数。
1926

被折叠的 条评论
为什么被折叠?



