关于python方法无法在线程中使用的解决办法


当前第2页 返回上一页

  为什么RequestHandler中post或者get请求被认为是一个后台的线程方法?这个问题从使用tornado的代码中可以窥得一二。代码如下:


1

2

3

4

5

6

7

8

if __name__ == '__main__':

    app = tornado.web.Application(

        handlers=[(r"/test/(\w+)", testHandler),

                  (r'/', MainHandler)]

    )

    server = tornado.httpserver.HTTPServer(app)

    server = server.listen(8848)

    tornado.ioloop.IOLoop.instance().start();

  在给tornado配置了路由规则之后,我们开启了httpserver的服务,最后创建进程来使tornado运行起来。而每次的post或者get请求则是通过路由调用相应的Handler,这些都是在线程中执行的。故案例中通过com组件WMI来获取系统流量放在get方法中就会报错。修改后如下:


1

2

3

4

5

6

7

8

9

10

def get(self):

    res = {}        pythoncom.CoInitialize()

    c = wmi.WMI()

    interfaces = c.Win32_PerfRawData_Tcpip_NetworkInterface()        print len(interfaces)

    rec = send = 0.0        for t in interfaces:            print t.Name

        rec += float(t.BytesReceivedPersec) / 1024 / 1024

        send += float(t.BytesSentPersec) / 1024 / 1024        print rec, send

    res["receive"] = "%.2f" % rec

    res["send"] = "%.2f" % send      

    self._write_json(res)

 模块中很有很多类型(类型也有很多属性),在具体使用的过程中查询起来很痛苦。案例中的统计流量用的是Win32_PerfRawData_Tcpip_NetworkInterface ,也有解决方案用的是Win32_PerfRawData_Tcpip_TCPv4 两个统计到的数据差别很大,请根据实际情况来选择。

以上就是关于python方法无法在线程中使用的解决办法的详细内容,更多文章请关注木庄网络博客!!

返回前面的内容

相关阅读 >>

Python大神用的9个实用技巧分享给你

Python解析json的实例分享

如何使用不同分隔符切分字符串

在电脑上怎么下载Python

Python中的对象属性如何访问?两种方法实例解析

Python线程优先级队列是什么?线程优先级的设置方法有哪些?

Python是一种面向什么的高级语言

介绍Python中星号变量的特殊用法

Python实现循环定时器的方法介绍(附代码)

Python能做嵌入式吗

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...