我寫了一個(gè)代碼,它應(yīng)該接收一些圖像并將它們變成黑白。我正在測(cè)量每個(gè)任務(wù)的響應(yīng)時(shí)間(響應(yīng)時(shí)間 = 接收到每個(gè)圖像并變成黑白圖像的時(shí)間)。這是代碼:from __future__ import print_functionimport signalsignal.signal(signal.SIGINT, signal.SIG_DFL)from select import selectimport socketfrom struct import packfrom struct import unpack#from collections import dequeimport commandsfrom PIL import Imageimport timehost = commands.getoutput("hostname -I")port = 5005backlog = 5BUFSIZE = 4096queueList = []start = []end = []temp = []def processP(q): i = 0 while q: name = q.pop(0) col = Image.open(name) gray = col.convert('L') bw = gray.point(lambda x: 0 if x<128 else 255, '1') bw.save("%d+30.jpg" % (i+1)) end.append(time.time()) #print(temp) i = i + 1class Receiver: ''' Buffer binary data from socket conn ''' def __init__(self, conn): self.conn = conn self.buff = bytearray() def get(self, size): ''' Get size bytes from the buffer, reading from conn when necessary ''' while len(self.buff) < size: data = self.conn.recv(BUFSIZE) if not data: break self.buff.extend(data) # Extract the desired bytes result = self.buff[:size] # and remove them from the buffer del self.buff[:size] return bytes(result) def save(self, fname): ''' Save the remaining bytes to file fname ''' with open(fname, 'wb') as f: if self.buff: f.write(bytes(self.buff)) while True: data = self.conn.recv(BUFSIZE) if not data: break f.write(data)現(xiàn)在出于某些評(píng)估目的,我多次發(fā)送單個(gè)圖像。當(dāng)我查看響應(yīng)時(shí)間時(shí),我發(fā)現(xiàn)有時(shí)第 8 個(gè)圖像的響應(yīng)時(shí)間比第 9 個(gè)圖像的響應(yīng)時(shí)間更長(zhǎng)。所以我的問題是,由于處理每個(gè)圖像所需的大小和時(shí)間都相同(我多次發(fā)送單個(gè)圖像),為什么每個(gè)圖像的響應(yīng)時(shí)間是變量?下一個(gè)圖像的響應(yīng)時(shí)間不應(yīng)該比前一個(gè)更長(zhǎng)(或至少相等)(例如,第 4 個(gè)圖像的響應(yīng)時(shí)間 > 第 3 個(gè)圖像的響應(yīng)時(shí)間)?
1 回答

阿晨1998
TA貢獻(xiàn)2037條經(jīng)驗(yàn) 獲得超6個(gè)贊
您的列表包含每個(gè)圖像處理調(diào)用所花費(fèi)的實(shí)際時(shí)間。這個(gè)值會(huì)受到很多因素的影響,包括當(dāng)時(shí)系統(tǒng)的負(fù)載量。
當(dāng)您的程序運(yùn)行時(shí),它不能獨(dú)占訪問它所運(yùn)行系統(tǒng)的所有資源(cpu、ram、磁盤)。可能有數(shù)十個(gè)、數(shù)百個(gè)或數(shù)千個(gè)由操作系統(tǒng)管理的其他進(jìn)程爭(zhēng)奪資源。鑒于此,當(dāng)您以亞秒級(jí)精度進(jìn)行測(cè)量時(shí),您極不可能看到在兩次運(yùn)行之間以完全相同的時(shí)間處理的相同圖像。每次連續(xù)調(diào)用所需的時(shí)間可以(并且將會(huì))上下波動(dòng)。
添加回答
舉報(bào)
0/150
提交
取消