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完成操作后,
2 comments
沙雕。
还想混不 咳咳