day9多线程,多进程、单元测试(怎么写用例、查找用例、参数化、产生测试报)
#多线程
import threading
import time
import random
def clean():
print('打扫卫生')
time.sleep(2)
def xiyifu():
print('洗衣服')
time.sleep(3)
def zuofan():
print('做饭')
time.sleep(1)
#主线程等待子线程,先都start完,再一起join(),如果start完直接join,所有线程都等待该线程结束
# t.join()
# t2.join()
# t3.join()
result_list = []#存放函数返回值
def export_data(db,excel):#需要传参数
print(threading.current_thread())#返回当前线程对象
print('expord_data',db,excel)
time.sleep(random.randint(1, 5))
# print('export_data')
return random.randint(1,5)#没有地方接收返回值,定义一个list用来存放函数返回值(result_list)
result_list.append(random.randint(1, 5))
# start_time=time.time()
# t = threading.Thread(target=clean)#子线程,target只付给函数名,告诉这个线程做什么
# t2 = threading.Thread(target=xiyifu)
# t3 = threading.Thread(target=zuofan)
#
# t.start()
# t2.start()
# t3.start()
#
# #主线程等待子线程,先都start完,再一起join(),如果start完直接join,所有线程都等待该线程结束
# t.join()
# t2.join()
# t3.join()
#
# end_time = time.time()
# print(end_time-start_time)
# time.sleep(4)
# print(threading.active_count())#当前线程数
#1、等待多个子线程执行结束,先把子线程放到list中,
# thread_list=[]
# for i in range(10):
# t=threading.Thread(target=export_data)
# thread_list.append(t)
# t.start()
#
# for t in thread_list:
# t.join()
#
# print('数据导完了')
#2、等到多个子线程执行结束,通过判断当前线程数
for i in range(5):
t=threading.Thread(target=export_data,args=['db1','a.xls'])
t.start()
while threading.active_count() != 1:
pass
print(result_list)
print('数据都导完了')
#多线程举例
import threading
import requests
import tools
def down_load_pic(url):
print('开始下载',url)
r = requests.get(url)
file_name=tools.md5(url)+'.jpg'
with open(r'E:\gw\python\test1\day9\tupian\%s' % file_name,'wb') as fw:
fw.write(r.content)
urls = [
'https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=3353166494,2700282750&fm=26&gp=0.jpg',
'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1603003159808&di=7a97fdd275ec4e0fc4ab54bdb8a2e703&imgtype=0&src=http%3A%2F%2Fwww.pc6.com%2Fup%2F2011-12%2F201112918444441530.jpg',
'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1603003159808&di=0ae20fe3bd8759c059cb4432938e4062&imgtype=0&src=http%3A%2F%2F5b0988e595225.cdn.sohucs.com%2Fimages%2F20181209%2F38467a58f9264ca68eefa37719b4b739.jpeg',
'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1603003159807&di=5040439b916279a7106a7660b7e0168a&imgtype=0&src=http%3A%2F%2Fimg1.cache.netease.com%2Fcatchpic%2FE%2FE5%2FE5DD0A8099E2D28226465C6894F7A7A1.jpg'
]
for url in urls:
t = threading.Thread(target=down_load_pic,args=[url])
t.start()
while threading.active_count()!=1:
pass
print('所有图片下载完成')
# def down_load_pics(urls):
# print('开始下载')
# for url in urls:
# r = requests.get(url)
# file_name=tools.md5(url)+'.jpg'
# with open(file_name,'wb') as fw:
# fw.write(r.content)
# for url in urls:
# t=threading.Thread(target=down_load_pic,args=[url])
# t.start()
# len(urls)/10
# urls[:2]
# urls[2,4]
# start_index=0
# end_index=0
# for i in range(10):
# step = len(urls)/10
# end_index+=step
# urls[start_index:end_index]
# t=t=threading.Thread(target=down_load_pics,args=[url])
#
# while threading.active_count()!= 1:
# pass
#
# #50个线程,平均分配给每个线程
# print('所有图片下载完成')
#守护线程
# 守护线程
# 只要主线程执行结束,不管子线程是否结束,所有子线程都结束
import threading
import time
import random
def talk(name):
print('正在和%s聊天'%name)
time.sleep(random.randint(1,5))
print('和%s聊完了'%name)
t = threading.Thread(target=talk,args=['尹璐名'])
t.setDaemon(True)#设成守护线程
t.start()
t = threading.Thread(target=talk,args=['张丹'])
t.setDaemon(True)#设成守护线程
t.start()
t = threading.Thread(target=talk,args=['刘海洋'])
t.setDaemon(True)#设成守护线程
t.start()
t = threading.Thread(target=talk,args=['代爽'])
t.setDaemon(True)#设成守护线程
t.start()
# while threading.active_count()!=1:
# pass
print('退出qq')
#线程池
#pip install threadpool
#多线程只能运行一个cpu,所以I/O密集型任务使用多线程(例如:读写文件,上传,下载)可以提高速度。
#cpu密集型任务,(排序、运算),使用多进程
import threadpool#线程池
import threading
import requests
import tools
def down_load_pics(url):
print(threading.current_thread())#返回当前线程对象
print('开始下载', url)
r = requests.get(url)
file_name=tools.md5(url)+'.jpg'
with open(r'E:\gw\python\test1\day9\tupian\%s' % file_name, 'wb') as fw:
fw.write(r.content)
urls = ['https://q4.qlogo.cn/g?b=qq&nk=475566024&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=616745045&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=1473732204&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=974757912&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=1649366257&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=1031884559&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=875197774&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=821254160&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=573865240&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=1390187782&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=794731904&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=752453244&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=21007874&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=799547450&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=1072107057&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=1916515489&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=2472761190&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=516481730&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=769855584&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=1219841454&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=806930450&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=865020636&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=294142908&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=602647962&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=429255693&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=455525857&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=173547362&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=739124752&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=947078208&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=846913816&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=1561131041&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=1113092340&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=1123414020&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=584277761&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=694900554&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=2264715013&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=1345741814&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=623342455&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=1021283465&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=675600120&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=2503297190&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=1765242270&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=2273747892&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=526962645&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=1522503760&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=690942492&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=705768596&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=2496140985&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=690763103&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=935306254&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=649055943&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=373235798&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=386756529&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=345534648&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=1473732204&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=616745045&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=475566024&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=546437532&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=478297268&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=1045488018&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=529742452&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=498356537&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=1216201256&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=2420495011&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=573865240&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=540779515&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=576401639&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=642611305&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=191036879&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=309556238&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=443658608&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=582238977&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=1002876683&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=790407854&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=2728566370&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=380868478&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=50838724&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=1204769712&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=977986117&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=271094088&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=842556893&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=1307361960&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=735557314&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=231637664&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=450416548&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=352780148&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=451770310&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=29634955&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=369021828&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=605130685&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=547215440&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=2758074764&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=303493454&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=1097428472&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=122217907&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=674429340&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=964066767&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=326209638&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=447830919&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=2675525296&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=38485204&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=912789481&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=2332763905&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=823269956&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=842167869&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=16774483&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=834732600&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=490895919&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=1615626139&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=38170353&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=2757286691&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=526962645&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=869841650&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=397031079&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=1245223999&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=790038009&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=623447784&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=254875515&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=57100459&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=3251046152&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=396990356&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=460902513&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=1052718000&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=1129862709&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=656450052&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=849099934&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=972621860&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=1072032210&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=861097570&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=1670072566&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=917623040&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=516902394&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=382608430&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=304561494&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=247545894&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=418785462&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=990042616&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=595079628&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=1061982257&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=875580931&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=821317585&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=41833737&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=170107630&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=270284132&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=401515395&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=729111761&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=657172434&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=707045247&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=359147214&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=443142267&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=2539803416&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=752641005&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=498201529&s=140', 'https://q4.qlogo.cn/g?b=qq&nk=420394884&s=140']
pool = threadpool.ThreadPool(50)#起多少个线程
reqs = threadpool.makeRequests(down_load_pics,urls)#给每个线程分配数据,
[pool.putRequest(req) for req in reqs]#把上一步分配好的任务放到线程池中去运行
# for req in reqs:
# pool.putRequest(req)
pool.wait()#等待子线程完成
print('运行完成')
#锁
import threading
count = 0
lock = threading.Lock()
def add():
global count
for i in range(1000):
# lock.acquire()
# count+=1
# lock.release()
with lock:
count+=1
for i in range(2):
t = threading.Thread(target=add)
t.start()
while threading.active_count()!=1:
pass
print(count)
#队列
import queue
import random
import time
import threading
orders_q=queue.Queue()
#生产者/消费者模式
lock = threading.Lock()
def producer():
for i in range(10):
order_id = random.randint(1,99999)
print('订单生成,orderid:%s'%order_id)
with lock:
orders_q.put(order_id)
print(orders_q.qsize())
time.sleep(1)
def consumer():
while True:
if orders_q.qsize()>0:
with lock:
order_id = orders_q.get()
print('订单落库',order_id)
print(orders_q.qsize())
time.sleep(1)
t1=threading.Thread(target=producer)
t1.setDaemon(True)
t1.start()
t2 = threading.Thread(target=consumer)
#time.sleep(3)
t2.setDaemon(True)
t2.start()
while threading.active_count()!=2 or orders_q.qsize()!=0:
pass
print('所有产品卖完')
#当一台机器是生产者,多台机器是消费者是,如何拿到队列,用开源队列软件rabbitmq 或 activemq
#多线程
# -*- coding:utf-8 -*-
# @FileName :多进程.py
# @Time :2020/10/23 11:38
# @Author :GW
# @Desc :
import multiprocessing #多进程
import threading
import time
# def make_money():
# print('开始挣钱')
# time.sleep(10)
# 一个进程里面可以再起多个线程
def make_money():
print('开始挣钱')
for i in range(2):
t = threading.Thread(target=maibaozi)
t.start()
time.sleep(10)
def maibaozi():
print(threading.current_thread())
print('卖包子一天挣500元')
time.sleep(5)
# def start_process():
# p=multiprocessing.Process(target=make_money)
# p.start()
#
# start_process()
if __name__ == '__main__': #在windows下必须把进程写在该句下面
# p = multiprocessing.Process(target=make_money)
# p.start()
#起多个进程
for i in range(3):
p=multiprocessing.Process(target=make_money)
p.start()
print(multiprocessing.active_children())#返回子进程列表,返回的是list
while len(multiprocessing.active_children())!=1: #判断子进程个数不等于1,继续等待
pass
print('运行结束')

浙公网安备 33010602011771号