1、threading模块是Python里面常用的线程模块,多线程处理任务对于提升效率非常重要

例如没有使用多线程的程序执行

#!/usr/bin/env
import time, threading

# 需要执行的方法
def runFunction(params):
    # 接收传参
    print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))+": runFunction方法参数 "+str(params))
    time.sleep(5)  # 休眠5秒模拟 数据处理时间(比如爬虫抓取页面时间)


# main主执行方法
if __name__ == "__main__":

    # 现在有10个任务需要执行
    for i in range(10):
        runFunction(i)

    print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))+":执行完成")

你会发现需要至少执行50秒

使用threading多线程控制以后 只需要最少5秒的时间处理事情


#!/usr/bin/env
import time, threading


# 需要执行的方法
def runFunction(params):
    # 接收传参
    print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))+": runFunction方法参数 "+str(params))

    # print('%s is running...' % threading.current_thread().getName())  # 返回线程名称
    # print("Pid is :%s" % threading.get_ident())  # 返回线程pid

    time.sleep(10)  # 休眠10S方便统计存活线程数量


# main主执行方法
if __name__ == "__main__":

    # 队列lists
    lists = []

    # 现在有10个任务需要执行
    for i in range(10):
        print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))+": 压入队列:"+str(i))
        # 压入队列
        data = threading.Thread(target=runFunction, args=(i,))  # 逗号不能省!
        lists.append(data)

    print("开始执行")
    # 执行队列
    for i in lists:
        i.start()

    # 释放任务
    for i in lists:
        i.join()

    print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))+":执行完成")

join()方法:主线程A中,创建了子线程B,并且在主线程A中调用了B.join(),那么,主线程A会在调用的地方等待,直到子线程B完成操作后,

Last modification:November 21st, 2019 at 06:34 pm
如果觉得我的文章对你有用,请随意赞赏