标签: tornado

龙卷风登录示例/教程

我想知道是否有人知道在Tornado中实现登录/注册页面的任何示例代码或教程?我看过它附带的例子,但它们看起来非常以facebook/oauth为中心.

python login tornado login-script

19
推荐指数
2
解决办法
3万
查看次数

Tornado是"一个用Python编写的相对简单,无阻塞的Web服务器框架" - 可以解释一下这意味着什么?

这可能是一个愚蠢的问题,但究竟什么是"非阻塞Web服务器"?所有的Web服务器在技术上都是非阻塞的,不是吗?否则他们怎么能处理同时连接?Apache2使用fork()和pthreads的组合实现了这一点.龙卷风(和Twisted)究竟有何不同?他们只是将一堆套接字设置为非bocking模式,构建FD列表(或等效的),然后使用一个大的select()sys调用来循环它吗?

你会在哪里使用这样的框架,以及它们可以通过Apache2(或其他流行的服务器)给你带来什么好处?谢谢

apache2 twisted tornado

18
推荐指数
1
解决办法
2577
查看次数

龙卷风相当于延迟

在龙卷风中是否有等效的命令用于延迟功能而不影响主进程进入休眠状态(因此即使主线程正在分析新的函数调用,回调也会执行)

python tornado

18
推荐指数
3
解决办法
1万
查看次数

@ tornado.web.asynchronous decorator是什么意思?

  1. 如果代码没有使用这个装饰器,它是否是非阻塞的?
  2. 为什么这个名字是异步的,这意味着添加装饰器让代码异步?
  3. 为什么@ tornado.gen总是和@ tornado.web.asynchronous一起使用?

python tornado

18
推荐指数
2
解决办法
7518
查看次数

如何使用模拟框架模拟龙卷风协程功能进行单元测试?

标题简单描述了我的问题.我想用特定的返回值来模拟"_func_inner_1".谢谢你的任何建议:)

被测代码:

from tornado.gen import coroutine, Return
from tornado.testing import gen_test
from tornado.testing import AsyncTestCase

import mock

@coroutine
def _func_inner_1():
    raise Return(1)

@coroutine
def _func_under_test_1():
    temp = yield _func_inner_1()
    raise Return(temp + 1)
Run Code Online (Sandbox Code Playgroud)

但是,这种直观的解决方案无效

class Test123(AsyncTestCase):

    @gen_test
    @mock.patch(__name__ + '._func_inner_1')
    def test_1(self, mock_func_inner_1):
        mock_func_inner_1.side_effect = Return(9)
        result_1 = yield _func_inner_1()
        print 'result_1', result_1
        result = yield _func_under_test_1()
        self.assertEqual(10, result, result)
Run Code Online (Sandbox Code Playgroud)

如果出现以下错误,似乎_func_inner_1没有修补,因为它具有协同性质

AssertionError: 2
Run Code Online (Sandbox Code Playgroud)

如果我添加coroutine补丁返回模拟功能

@gen_test
@mock.patch(__name__ + '._func_inner_1')
def test_1(self, mock_func_inner_1):
    mock_func_inner_1.side_effect = Return(9)
    mock_func_inner_1 = coroutine(mock_func_inner_1)
    result_1 = yield …
Run Code Online (Sandbox Code Playgroud)

python unit-testing mocking tornado

18
推荐指数
1
解决办法
6172
查看次数

Jupyter Notebook与Python 3.8-NotImplementedError

最近升级到Python 3.8,并已安装jupyter。但是,当尝试运行时jupyter notebook出现以下错误:

  File "c:\users\user\appdata\local\programs\python\python38\lib\site-packages\tornado\platform\asyncio.py", line 99, in add_handler
    self.asyncio_loop.add_reader(fd, self._handle_events, fd, IOLoop.READ)
  File "c:\users\user\appdata\local\programs\python\python38\lib\asyncio\events.py", line 501, in add_reader
    raise NotImplementedError
NotImplementedError
Run Code Online (Sandbox Code Playgroud)

我知道ProactorEventLoop默认情况下Windows上的Python 3.8已切换为默认设置,因此我怀疑它与此相关。

Jupyter目前不支持Python 3.8?有没有解决的办法?

python windows tornado jupyter-notebook

18
推荐指数
2
解决办法
6232
查看次数

Tornado AsyncHTTPClient获取回调:额外的参数?

我对这整个异步游戏(主要是一个Django家伙)有点新鲜,但我想知道:如何将额外的参数传递给Tornado的AsyncHTTPClient.fetch回调?例如,我正在跟踪调用回调的次数(为了等到某个数字在执行数据之前已执行),我想做的事情如下:

def getPage(self, items,iteration):
    http = AsyncHTTPClient()    
    http.fetch(feed, callback=self.resp(items,iteration))
def resp(self, response, items, iteration):
    #do stuff
    self.finish()
Run Code Online (Sandbox Code Playgroud)

python asynchronous tornado

17
推荐指数
1
解决办法
4061
查看次数

删除龙卷风中的安全Cookie

我刚开始学习网络服务器,特别是龙卷风.

我想写一个带登录功能的简单网页.如Tornado文档中所述,我在用户成功插入后创建了一个安全的cookie:

self.set_secure_cookie("user", self.get_argument("user"))
Run Code Online (Sandbox Code Playgroud)

但是,如何为用户提供注销方式?如前所述,我不熟悉Web服务器,但是当我在用户尝试进入主页时检查此cookie时,我想我只需要在用户按下"注销"后将其删除?

不幸的是,我无法在龙卷风文件中找到任何关于此的信息,也无法在SO上找到.

python cookies tornado

17
推荐指数
1
解决办法
6322
查看次数

龙卷风:识别/跟踪websockets的连接?

我有一个基本的Tornado websocket测试:

import tornado.httpserver
import tornado.websocket
import tornado.ioloop
import tornado.web

class WSHandler(tornado.websocket.WebSocketHandler):
    def open(self):
        print 'new connection'
        self.write_message("Hello World")

    def on_message(self, message):
        print 'message received %s' % message

    def on_close(self):
      print 'connection closed'


application = tornado.web.Application([
    (r'/ws', WSHandler),
])


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

我希望能够处理多个连接(它似乎已经存在),但也能够引用其他连接.我没有看到识别和跟踪各个连接的方法,只是为了能够处理连接打开,消息接收和连接关闭的事件.

[编辑]
想创建一个dict,其中键是Sec-websocket-key,而值是WSHandler对象......想法?我不确定Sec-websocket-key的独特性是多么可靠.

python tornado websocket

17
推荐指数
2
解决办法
1万
查看次数

是否有更好的方法来处理与龙卷风的index.html?


我想知道是否有更好的方法来处理我的Tornado index.html文件.

我对所有请求使用StaticFileHandler,并使用特定的MainHandler来处理我的主要请求.如果我只使用StaticFileHandler,我得到了403:Forbidden错误

GET http://localhost:9000/
WARNING:root:403 GET / (127.0.0.1):  is not a file
Run Code Online (Sandbox Code Playgroud)

这是我现在的表现:

import os
import tornado.ioloop
import tornado.web
from  tornado import web

__author__ = 'gvincent'

root = os.path.dirname(__file__)
port = 9999

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        try:
            with open(os.path.join(root, 'index.html')) as f:
                self.write(f.read())
        except IOError as e:
            self.write("404: Not Found")

application = tornado.web.Application([
    (r"/", MainHandler),
    (r"/(.*)", web.StaticFileHandler, dict(path=root)),
    ])

if __name__ == '__main__':
    application.listen(port)
    tornado.ioloop.IOLoop.instance().start()
Run Code Online (Sandbox Code Playgroud)

python tornado

17
推荐指数
3
解决办法
2万
查看次数