猿问

某些任务的响应时间正在减少

我写了一个代码,它应该接收一些图像并将它们变成黑白。我正在测量每个任务的响应时间(响应时间 = 接收到每个图像并变成黑白图像的时间)。这是代码:


from __future__ import print_function

import signal

signal.signal(signal.SIGINT, signal.SIG_DFL)

from select import select

import socket

from struct import pack

from struct import unpack

#from collections import deque

import commands

from PIL import Image

import time


host = commands.getoutput("hostname -I")

port = 5005

backlog = 5

BUFSIZE = 4096

queueList = []

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 + 1



class 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)

现在出于某些评估目的,我多次发送单个图像。当我查看响应时间时,我发现有时第 8 个图像的响应时间比第 9 个图像的响应时间更长。


所以我的问题是,由于处理每个图像所需的大小和时间都相同(我多次发送单个图像),为什么每个图像的响应时间是变量?下一个图像的响应时间不应该比前一个更长(或至少相等)(例如,第 4 个图像的响应时间 > 第 3 个图像的响应时间)?


qq_遁去的一_1
浏览 136回答 1
1回答

阿晨1998

您的列表包含每个图像处理调用所花费的实际时间。这个值会受到很多因素的影响,包括当时系统的负载量。当您的程序运行时,它不能独占访问它所运行系统的所有资源(cpu、ram、磁盘)。可能有数十个、数百个或数千个由操作系统管理的其他进程争夺资源。鉴于此,当您以亚秒级精度进行测量时,您极不可能看到在两次运行之间以完全相同的时间处理的相同图像。每次连续调用所需的时间可以(并且将会)上下波动。
随时随地看视频慕课网APP

相关分类

Python
我要回答