当前位置: 首页 > 知识库问答 >
问题:

如何在处理程序中对龙卷风处理程序进行基准测试?

禄星腾
2023-03-14

我编写了一个非常简单的tornado处理程序,用于测试远程部署的一些设备的上传速度。主要测试将在所说的远程设备上运行(多亏了cURL),我可以得到上传时间的详细报告。

Tornado处理程序真正要做的唯一一件事就是接受一个包含大量字节的实体(差不多就是这样)

class TestUploadHandler(tornado.web.RequestHandler):
   def post(self):
        logging.debug("Testing upload")
        self.write("")

所以,上面的代码是有效的,但它有点。。。几乎是可耻的:-D让它更。。。可展示的,我想展示一些更有用的日志,比如请求上传所花的时间或者类似的东西。我不知道。。。稍微多汁一点的。

有没有办法测量龙卷风处理器本身的上传速度?我已经谷歌了如何测试龙卷风处理器,但是我似乎只能找到不同网络服务器之间的性能比较。

先谢谢你。

共有1个答案

沈嘉瑞
2023-03-14

嗯,上传本身需要多长时间很简单:

import time

class TestUploadHandler(tornado.web.RequestHandler):
   def post(self):
        logging.debug("Testing upload")
        start = time.time()
        self.write({})
        end = time.time()
        print "Time to write was {} seconds.".format(end-start)

如果要在多个处理程序中使用定时代码,还可以将其移动到装饰器:

from functools import wrap
import time

def timer(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        start  = time.time()
        ret = func(*args, **kwargs)
        end = time.time()
        print 'Function took {} seconds'.format(end-start)
        return ret 
    return wrapper

class TestUploadHandler(tornado.web.RequestHandler):
   @timer
   def post(self):
        logging.debug("Testing upload")
        self.write({})

编辑:

考虑到您试图从服务器的角度衡量上传到服务器需要多长时间,上述方法是行不通的。看来你能用tornado最接近的方法就是使用@tornado。网状物stream_request_bodydecorator,以便将请求正文作为流接收:

@tornado.web.stream_request_body
class ValueHandler(tornado.web.RequestHandler):
    def initialize(self):
        self.start = None

    def post(self):
        end = time.time()
        print self.request
        if self.start:
            print("Upload time %s" % end-self.start)
        self.write({})

    def data_received(self, data):
        if not self.start:
            self.start = time.time()

当收到请求主体的第一块时,我们将时间保存(作为self.start)。post方法将在收到完整的正文后被调用,因此我们得到end

不过,我在大文件上传时遇到了问题。不过,它似乎对小文件(100MB以下)工作正常。

 类似资料:
  • 我阅读了tornado和相关模块,以了解当接受套接字并解析和处理请求时,tornado会做什么。 然后我向tornado发送一些请求,所有请求都被设置为读取超时3秒,我在tornado上发现了一些连接,几分钟后,这些连接正常关闭。 我猜5秒处理程序是减缓tornado的事件循环,当tornado处理第二个处理程序时,它的连接已经关闭,如果tornado知道了,它就不需要再做下一步了。

  • 调用存储引擎的第1个方法是调用新的处理程序实例。 在存储引擎源文件中定义handlerton之前,必须定义用于函数实例化的函数题头。下面给出了1个来自CSV引擎的示例: static handler* tina_create_handler(TABLE *table); 正如你所见到的那样,函数接受指向处理程序准备管理的表的指针,并返回处理程序对象。 定义了函数题头后,用第21个handlerto

  • 问题内容: 对于大学,我进行字节码修改,并分析它们对Java程序性能的影响。因此,我需要Java程序(在生产中最好使用的Java程序)和适当的基准测试。例如,我已经有了HyperSQL,并通过基准程序PolePosition来衡量其性能。在没有JIT编译器的JVM上运行的Java程序。谢谢你的帮助! PS:我不能使用程序来对JVM或Java语言本身的性能进行基准测试(例如Wide Finder)。

  • 示例响应处理程序: 我们如何通过模拟处理程序中的对象来对上述处理程序进行单元测试?

  • 我试图抓住无效的json,而解析它与jiffy在牛仔web套接字处理程序。如果json是有效的/无效的,我想转发一个适当的消息到,它将回复客户端。这是我的代码。 这会导致运行时异常。 12:07:48.406[错误]牧场侦听器http已连接到进程 那我该怎么做呢?

  • 这就是我试图解决但不确定如何解决的问题:我有一个对象数组(假设大小为100),每个对象都有一些id。 有10个线程将从该数组中读取数据并将其插入数据库。 如何确保数据以递增序列的方式根据员工ID的序列插入数据库。例如: 如果数组中的对象具有员工ID 6、8和4,那么这些对象应该按照员工ID 4、6和8在数据库中的顺序插入数据库。如何为此编写多线程代码? 更新:请忽略数据库部分,如果它令人困惑,我的