def startClients(reactor, runTimeInfo, UrlList, targetClients, timeout, intervalTime=0, stepNums=0): global SummaryList global RequestPerConnection global IsRun global MaxRequests global RequestSleepTime global PipelineNum global Clients moreClients = targetClients - len(Clients) if stepNums != 0 and moreClients > stepNums: moreClients = stepNums; prevSize = len(Clients) for i in range(0, moreClients): MIN = "0107777%04d" % (i + prevSize) c = eh.eh(reactor, runTimeInfo, RequestPerConnection, UrlList, MaxRequests, HostIP, Port, RequestSleepTime, MIN, PipelineNum) c.start() Clients.append(c) print "%d Clients started" % moreClients return moreClients
def startRequest(reactor, runTimeInfo, UrlList, targetClients, timeout): global SummaryList global RequestPerConnection global IsRun global MaxRequests global RequestSleepTime global PipelineNum IsRun = True Clients = [] for i in range(0, targetClients): MIN = "0100000%04d" % (i+1) c = eh.eh(reactor, runTimeInfo, RequestPerConnection, UrlList, MaxRequests, HostIP, Port, RequestSleepTime, MIN, PipelineNum) c.start() Clients.append(c) if RequestSleepTime > 0.0: try: time.sleep(RequestSleepTime/targetClients) except: pass sys.stdout.write(".") sys.stdout.flush() print "" programTimeout = time.time() + timeout programStartTime = time.time() # event loop oldRequestNum = 0 while IsRun: newRequestNum = len(runTimeInfo) diffRequestNum = newRequestNum - oldRequestNum oldRequestNum = newRequestNum if log.getLogLevel() == 0: d = time.localtime(time.time()) dstr = "%02d:%02d:%02d" % (d[3], d[4], d[5]) if timeout > 0: leftTime = programTimeout - time.time() print dstr, "Clients: %d/%d, Request: %d(+%3d), ConFail: %d, Timeout: %d, Recv: %.1fM, LeftTime: %dsec" % \ (getConnectionCount(Clients), len(Clients), newRequestNum, diffRequestNum, getConnectionFailCount(Clients), getSelectTimeoutCount(Clients), getRecvDataSize(Clients)/1024.0/1024.0, leftTime) elif MaxRequests > 0: print dstr, "Clients: %d/%d, Request: %d(+%3d)/%d, ConFail: %d, Timeout: %d, Recv: %.1fM" % \ (getConnectionCount(Clients), len(Clients), newRequestNum, diffRequestNum, MaxRequests, getConnectionFailCount(Clients), getSelectTimeoutCount(Clients), getRecvDataSize(Clients)/1024.0/1024.0) else: print dstr, "Clients: %d/%d, Request: %d(+%3d), ConFail: %d, Timeout: %d, Recv: %.1fM" % \ (getConnectionCount(Clients), len(Clients), newRequestNum, diffRequestNum, getConnectionFailCount(Clients), getSelectTimeoutCount(Clients), getRecvDataSize(Clients)/1024.0/1024.0) # 종료 조건 확인 if MaxRequests > 0 and len(runTimeInfo) >= MaxRequests: IsRun = False break if timeout > 0 and programTimeout < time.time(): break try: time.sleep(1) except: pass for c in Clients: c.isRun = False programEndTime = time.time() programRunTime = programEndTime - programStartTime for c in Clients: c.join() c.close() del c strSummary = getSummary(runTimeInfo, programRunTime, getConnectionSuccessCount(Clients), targetClients, getConnectionFailCount(Clients), getSelectTimeoutCount(Clients), getActiveClose(Clients)) print "-----------------------------------------------------------------------" print strSummary #filename = "c%03d_sizeBasedTime.csv" % targetClients #saveSizeBasedTime(filename, runTimeInfo, strSummary) #filename = "c%03d_runTimeInfo.csv" % targetClients #saveRunTimeInfo(filename, runTimeInfo) stats = getSummaryStats(runTimeInfo, programRunTime, getConnectionSuccessCount(Clients), targetClients, getConnectionFailCount(Clients), getSelectTimeoutCount(Clients), getActiveClose(Clients)) return stats