标签: tornado

龙卷风 - 将文件传输到cdn而不会阻塞

我有nginx上传模块处理网站上传,但仍然需要传输文件(假设每个3-20mb)到我们的cdn,而不是将其委托给后台作业.

使用龙卷风执行此操作的最佳方法是什么,而不阻止其他请求?我可以在异步回调中执行此操作吗?

python cdn tornado

0
推荐指数
1
解决办法
2280
查看次数

在龙卷风Web框架中读取csv文件

我是龙卷风网络框架的新手.目前我正在构建一个Web应用程序,它应该加载csv文件然后处理它.我尝试在python中使用csv模块,并尝试了表格模块,这对我没有帮助.

所以,我的问题是,是否有任何包或开源库将读取csv文件数据并将其存储在某种变量类型中,以便我可以对该文件执行各种操作.

我收到以下错误:

raise ValueError, "Need formats argument"
Run Code Online (Sandbox Code Playgroud)

我的代码是:

import re
import sys
import os.path
import tornado.httpserver
import webbrowser
import personalfile
import tabular as tb
import csv

try:
    import tornado.ioloop
    import tornado.web
except:
    print 'No tornado module installed, Please install the tornado from http://www.tornadoweb.org/'
    sys.exit()

SRC = os.path.dirname(__file__)

# Main Handler
class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.render("static/template_upload.html")



class OutputHandler(tornado.web.RequestHandler):
    def post(self):
        template_file = self.get_argument('template_html', None)
        **data_file = self.get_argument('csvfile', None)
        data_file = csv.DictReader(data_file)**
        data_file = tb.tabarray(data_file, verbosity=0, headerlines=1)
        xhtmlOutput = …
Run Code Online (Sandbox Code Playgroud)

python csv tornado

0
推荐指数
1
解决办法
1178
查看次数

如何更改龙卷风帖子标题并添加到标题新数据?

我有处理post请求的处理程序并将一些JSON返回给客户端,在我返回之前我需要验证输入数据,如果数据没有通过验证我需要放入头文件(我不知道如何修改头文件并添加额外的key)它不是在VALIDATION键或其他任何东西下传递验证标志.如何更改tornado post header并将此数据添加到标题中?

def post(self):
    data = tornado.escape.json_decode(self.request.body)
    key = data.get('key', None)

    # here if key is not in db and did not pass validation I should add VALIDATION key value False to header and send back to client 

    result = fetch_data_for(key)        
    self.write(json.dumps(result))
    self.flush()
Run Code Online (Sandbox Code Playgroud)

python tornado python-2.7

0
推荐指数
1
解决办法
5632
查看次数

龙卷风不解释URL

我一直在尝试使用Tornado Framework创建一个Web服务.该系统应该处理如下URL:

IP:Port/?user=1822&catid=48&skus=AB1,FS35S,98KSU1

首先我创建了这段代码来阅读网址:

#!/usr/bin/env python

from datetime import date
import tornado.httpserver
import tornado.escape
import tornado.ioloop
import tornado.web

class WService(tornado.web.RequestHandler):
    def get(self, url):
        self.write("value of url: %s" %(url))

application = tornado.web.Application([
    (r"/([^/]+)", WService)])

if __name__ == "__main__":
    http_server = tornado.httpserver.HTTPServer(application)
    http_server.listen(9000)
    tornado.ioloop.IOLoop.instance().start()
Run Code Online (Sandbox Code Playgroud)

并输入网址:

IP:Port/hello_world

导致:

value of url: hello_world

除了"?"之外,URL中使用的任何字符都有效.更改代码时,例如:

application = tornado.web.Application([
        (r"/?([^/]+)", WService)])
Run Code Online (Sandbox Code Playgroud)

并将网址发送到"?" mark(IP:Port/?hello_world)结果是:

404: Not Found

研究龙卷风来解决这个问题我发现了这个get_argument方法并尝试应用它,例如:

class WService2(tornado.web.RequestHandler):
    def get(self):
        user = self.get_argument('user', None)   
        respose = { 'user': user }   
        self.write(response) …
Run Code Online (Sandbox Code Playgroud)

python regex url tornado

0
推荐指数
1
解决办法
1163
查看次数

使用Tornado向客户端发送间歇性更新

我编写了一个简单的龙卷风应用程序,使用web-socket来管理守护进程(就像传输web界面一样).困扰我的一件事是状态更新的实施.我的WebSocketHandler只接收来自客户端的消息,执行必要的操作,检查状态并将其发送给客户端.它没有请求就不会向客户端发送状态.

class WebSocketHandler(tornado.websocket.WebSocketHandler):

    def open(self):
        print('connected')
        self.daemon = Daemon()
        self.write_message(self.daemon.get_status())

    def on_message(self, message):
        if message == 'start':
            self.daemon.start()
        elif message == 'stop':
            self.daemon.stop()
        self.write_message(self.daemon.get_status())

    def on_close(self):
        print('disconnected')
Run Code Online (Sandbox Code Playgroud)

我在客户端使用javascript的setInterval函数来请求状态更新,如下所示:

        ws = new WebSocket("ws://localhost:8080/websocket");

        ws.onopen = function () {
          setInterval(function() {
            if (ws.bufferedAmount == 0)
              ws.send('status');
          }, 1000);
        };
    }
Run Code Online (Sandbox Code Playgroud)

如何在服务器端实现相同的结果,以便龙卷风在不阻塞on_message方法的情况下将当前状态发送给客户端?

python tornado

0
推荐指数
1
解决办法
687
查看次数

为什么龙卷风不同时出现?

以下是我的测试代码.我正在使用Python2.7,futures安装使用:

pip install futures
Run Code Online (Sandbox Code Playgroud)

以下是我的演示代码:

import tornado.ioloop
import tornado.web
from tornado.gen import coroutine, Task
from tornado.concurrent import Future
import time


class MainHandler(tornado.web.RequestHandler):
    @coroutine
    def get(self):
        print "in"
        res = yield Task(self._work)
        self.write(res)

    def _work(self, callback):
        time.sleep(10)
        callback("hello world!")

if __name__ == "__main__":
    application = tornado.web.Application([
        (r"/", MainHandler),
    ])
    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()
Run Code Online (Sandbox Code Playgroud)

这段代码应该同时进行,不应该吗?但是,它没有.

我用Firefox和IE测试过.我想我犯了一些错误.你指出我的错误会很高兴.

一次只有一个请求(http://localhost:8888/:

import tornado.ioloop
import tornado.web
from tornado.gen import coroutine, Return, Task
from tornado.process import Subprocess
from tornado.concurrent import Future
from threading import Thread
import …
Run Code Online (Sandbox Code Playgroud)

python asynchronous tornado

0
推荐指数
1
解决办法
901
查看次数

使用Python和Tornado运行后台任务

我已经做了几年的Web应用程序开发人员,现在正在使用Python和Robotics.

我已经设置了Python Tornado来运行基于javascript websocket命令.这很棒,移动电机,打开LED.不是问题.

我想做的2件事.

1)闪烁LED

2)使用超声波范围传感器,停止FORWARD动作IF范围<X

我知道如何在自己内部做两件事.

但是,我的python方式如下

WS.py

import tornado.httpserver
import tornado.websocket
import tornado.ioloop
import tornado.web
import time
# My Over python module
import tank

class WSHandler(tornado.websocket.WebSocketHandler):

    def open(self):

        print 'New connection was opened'
        self.write_message("Welcome to my websocket!")
        tank.init()

    def on_message(self, message):
        print 'Incoming message:', message
        tank.run(message)
        self.write_message("You said: " + message)

   def on_close(self):
       tank.end()
       print 'Connection was closed...'
   def check_origin(self, origin):
       return True
application = tornado.web.Application([
  (r'/ws', WSHandler),
])

if __name__ == "__main__":
    http_server = tornado.httpserver.HTTPServer(application)
    http_server.listen(8888) …
Run Code Online (Sandbox Code Playgroud)

python tornado websocket raspberry-pi raspberry-pi2

0
推荐指数
1
解决办法
1593
查看次数

python tornado下载远程文件

我想下载一个远程文件并提供文件名.如果文件在我们的服务器上,则此方法有效.但它不适用于远程文件和下载somerandomname.pdf

<a href="http://file.com/somerandomname.pdf" download="mypdf.pdf">DOWNLOAD</a>
Run Code Online (Sandbox Code Playgroud)

现在我尝试在python处理程序中下载它.它工作并下载我想要的文件名.但问题是我只能在浏览器中看到下载的文件util已完成下载.我无法在浏览器中看到下载过程.它只是在后端加载远程文件.有没有办法来解决这个问题?

def get(self):
    url = self.get_argument('url')
    filename = self.get_argument('filename')
    self.set_header('Content-Type', 'application/octet-stream')
    self.set_header('Content-Disposition', 'attachment; filename=%s' % filename)
    f = urllib2.urlopen(url)
    self.write(f.read())
    self.finish()
Run Code Online (Sandbox Code Playgroud)

python tornado download

0
推荐指数
1
解决办法
1729
查看次数

为什么asyncio的run_in_executor阻止龙卷风的get处理程序?

我想在龙卷风的异步GET请求处理程序中运行一个缓慢的阻止方法(实际上是从第三方库中)。将该方法设为:

def blocking_method(uid):
    print("slow method started: ", uid)
    time.sleep(10)
    print("slow method done: ", uid)
    return "slow method ({}) result".format(uid)
Run Code Online (Sandbox Code Playgroud)

此外,我更喜欢在asyncio的事件循环中运行龙卷风服务器:

if __name__ == '__main__':
    tornado.platform.asyncio.AsyncIOMainLoop().install()
    loop = asyncio.get_event_loop()
    loop.run_until_complete(make_app())
    loop.run_forever()
Run Code Online (Sandbox Code Playgroud)

我知道@run_in_executor装饰器,但是它不适合我,因为我使用asyncio。要在异步协程中运行阻止方法,应使用的run_in_executor方法asyncio.get_event_loop()。这是一个示例,如何从此答案中做到这一点

import asyncio

async def main():
    loop = asyncio.get_event_loop()
    executor = concurrent.futures.ThreadPoolExecutor(max_workers=4)
    future1 = loop.run_in_executor(executor, blocking_method, 1)
    future2 = loop.run_in_executor(executor, blocking_method, 2)
    response1 = await future1
    response2 = await future2
    print(response1)
    print(response2)

if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())
Run Code Online (Sandbox Code Playgroud)

而且效果很好,这是先前脚本的输出:

slow …
Run Code Online (Sandbox Code Playgroud)

python tornado python-asyncio

0
推荐指数
1
解决办法
1521
查看次数

Python Tornado AttributeError:模块“ test”没有属性“ __path__”

我正在尝试仅运行Tornado文档中Hello World代码

import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")

def make_app():
    return tornado.web.Application([
        (r"/", MainHandler),
    ])

if __name__ == "__main__":
    app = make_app()
    app.listen(8888)
    tornado.ioloop.IOLoop.current().start()
Run Code Online (Sandbox Code Playgroud)

除非出现错误: AttributeError: module 'test' has no attribute '__path__'

我只是使用IDLE运行 test.py

我以为这是由于我的Windows 10计算机没有Python可以访问,PATH但是即使在Python 3.6中添加了Python,PATH我仍然遇到相同的错误。有任何想法吗?

屏幕截图是我向其中添加python的方式PATH,我认为我理解正确。

在此处输入图片说明

------ 编辑 ------

我会添加一些我遇到的错误/回溯的屏幕截图。第一个是test.pyWindows 10中在IDLE 3.6中运行时下面的命令提示符。

在此处输入图片说明

如果有导入错误,我可以通过IDLE解释器很好地导入Tornado。 在此处输入图片说明

我也尝试hello World在IPython 3.7中运行此代码,但出现此错误: 在此处输入图片说明

python path tornado

0
推荐指数
1
解决办法
775
查看次数