python多线程执行_Python 怎么获取多线程的总执行时间??

一个 多线程爬视频的 py 脚本,我想看下总的执行时间,求大佬帮忙看看???

# -*- coding: utf-8 -*-

# @Author : 徐燚敏

# @File : movie_multiple.py

# @Project: python_spider

# @CreateTime : 2020-06-22 10

# encoding utf-8

import requests

from queue import Queue

import threading

import time

start_total_time = 0

end_total_time = 0

# 创建线程 生产者负责获取 URL,并且解析 URL

class Procuder(threading.Thread):

def __init__(self, num_queue, ts_queue, *args, **kwargs):

super(Procuder, self).__init__(*args, **kwargs)

self.num_queue = num_queue

self.ts_queue = ts_queue

def run(self):

while True:

if self.num_queue.empty():

# 如果队列为空就,线程执行完成,跳出死循环,结束 run

print("Procuder 队列为空")

break

url = self.num_queue.get()

self.download_ts(url)

def download_ts(self, url):

r = requests.get(url)

ret = r.content

# 倒数 8 位,取到文件名

filename = url[-8:]

self.ts_queue.put((ret, filename))

# 创建线程 消费者 负责下载

class Consumer(threading.Thread):

def __init__(self, num_queue, ts_queue, *args, **kwargs):

super(Consumer, self).__init__(*args, **kwargs)

self.num_queue = num_queue

self.ts_queue = ts_queue

def run(self):

while True:

if self.ts_queue.empty() and self.num_queue.empty():

# 如果队列为空就,线程执行完成,跳出死循环,结束 run

print("Consumer 队列为空")

end_total_time = time.time()

break

start_time = time.time()

ret, filename = self.ts_queue.get()

# 将 ts 文件保存到文件夹里

with open('./mp4/{}'.format(filename), 'wb') as f:

f.write(ret)

end_time = time.time()

print('{}下载完成!,耗时:{}'.format(filename,end_time - start_time) )

def main():

# 定义线程

num_queue = Queue(500)

ts_queue = Queue(500)

# 先自定义好总共爬取的数量

# for i in range(470):

for i in range(30):

url = " https://us8.wl-cdn.com/hls/20200619/e1c5cc36967e6dac688b5e9c4006a567/film_" + '{0:05d}'.format(i) + ".ts"

num_queue.put(url)

# time.sleep(1)

# 定义生产者

for x in range(5):

print("Procuder")

t = Procuder(num_queue, ts_queue)

t.start()

# 定义消费者

for x in range(5):

print("Consumer")

t = Consumer(num_queue, ts_queue)

t.start()

if __name__ == '__main__':

start_total_time = time.time()

lock = threading.RLock()

# 加锁

lock.acquire()

try:

main()

finally:

# 修改完成,释放锁

lock.release()

print("完成下载,总耗时{}".format(end_total_time - start_total_time))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值