记录Python的一种多线程使用方法

本文详细介绍了如何使用Python的threading模块实现一个多线程任务,通过控制线程池大小,确保在给定最大线程数的情况下,对url_list中的URL逐一执行poc函数。

记录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运行这个函数。

  1. print(f"线程数:{thread}"):这行代码打印出设置的最大线程数。

  2. threads = []:这行代码创建了一个空列表,用于存放所有创建的线程。

  3. for url in url_list:这行代码开始一个循环,对url_list中的每个URL都运行一次循环体的代码。

  4. while threading.active_count() > thread:这行代码开始一个循环,只有当当前活动的线程数大于设置的最大线程数时,才会运行循环体的代码。这个循环用于控制同时运行的线程数不超过设置的最大线程数。

  5. for t in threads:这行代码开始一个循环,对threads列表中的每个线程都运行一次循环体的代码。

  6. if not t.is_alive():这行代码检查线程t是否还在运行。如果线程t已经完成了它的任务并停止了,is_alive()会返回Falsenot t.is_alive()就会是True,所以这个if语句的条件就会满足。

  7. threads.remove(t):这行代码会在if语句的条件满足时被执行,它会从threads列表中移除线程t。这样做的目的是保持threads列表只包含还在运行的线程。

  8. t = threading.Thread(target=poc, args=(url,)):这行代码创建了一个新的线程,这个线程的任务是运行poc函数,函数的参数是当前循环的URL。

  9. t.start():这行代码启动了新创建的线程。

  10. threads.append(t):这行代码将新创建的线程添加到threads列表中。

  11. for t in threads::这行代码开始一个循环,对threads列表中的每个线程都运行一次循环体的代码。

  12. t.join():这行代码会等待线程t完成。如果线程t还在运行,join()会阻塞,直到线程t完成。这样做的目的是确保主线程(也就是运行这段代码的线程)在所有子线程都完成后再结束。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值