1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
| import threading import os import requests import random import uuid import json import time import csv import shutil from progressbar import *
class PostFile(threading.Thread): def __init__(self, tid, num, url, dir, output): super(PostFile, self).__init__() self.url = url self.tid = tid self.dir = dir self.num = num self.output = output self.receive_count = 0 self.token_accept = 0 self.file_list = os.listdir(self.dir)
def send_post(self): token = uuid.uuid4().__str__() file_name = self.file_list[random.randint(0, len(self.file_list)-1)] file = {'file': (file_name, open(os.path.join(self.dir, file_name), 'rb'))} data = {'keepFile': 1, 'token': token} global global_count global_count += 1 try: start = time.time() response = requests.post(self.url, files=file, data=data) end = time.time() response = json.loads(response.text) if response['token'] is not None: self.receive_count += 1 if token == response['token']: self.token_accept += 1 item = [token, response['token'], file_name, response['label'], end-start] except Exception as e: item = [token, '', file_name, '', 0] finally: return item
def run(self): response = [] thread_start = time.time() for i in range(self.num): item = self.send_post() response.append(item) thread_end = time.time() with open(os.path.join(self.output, "thread-[{}]-receive-[{}]-token-same-[{}]-cost-[{:.4f}].csv" .format(self.tid, self.receive_count, self.token_accept, thread_end-thread_start)), 'w', newline='') as t: writer = csv.writer(t) writer.writerows(response)
def build_worksapce(dir): dir = os.path.abspath(dir) if os.path.exists(dir): shutil.rmtree(dir) os.mkdir(dir)
if __name__ == '__main__': send_num = 100000 thread_num = 100 url = 'post_url' dir = './post_file_dir' output = './log_dir' global_count = 0 build_worksapce(output) widgets = ['Progress: ', Percentage(), ' ', Bar('#'), ' ', Timer(), ' ', ETA(), ' '] pbar = ProgressBar(widgets=widgets, maxval=send_num).start() start = time.time() for i in range(thread_num): post = PostFile(tid=i, num=send_num//thread_num, url=url, dir=dir, output=output) post.start()
while global_count != send_num: pbar.update(global_count+1)
end = time.time() print('\nSend: {}, used: {:.4f} s.'.format(send_num, end-start))
|