相关疑难解决方法(0)

龙卷风如何在龙卷风中发挥作用?

在Tornado的聊天演示中,它有一个这样的方法:

@tornado.web.asynchronous
def post(self):
    cursor = self.get_argument("cursor", None)
    global_message_buffer.wait_for_messages(self.on_new_messages,
                                            cursor=cursor)
Run Code Online (Sandbox Code Playgroud)

我对这个长时间的轮询很新,我并不完全理解线程的工作原理,尽管它表明:

通过使用非阻塞网络I/O,Tornado可以扩展到数万个开放连接......

我的理论是通过制作一个简单的应用程序:

import tornado.ioloop
import tornado.web
import time

class MainHandler(tornado.web.RequestHandler):
    @tornado.web.asynchronous
    def get(self):
        print("Start request")
        time.sleep(4)
        print("Okay done now")
        self.write("Howdy howdy howdy")
        self.finish()

application =  tornado.web.Application([
    (r'/', MainHandler),
])
Run Code Online (Sandbox Code Playgroud)

如果我连续发出两个请求(即我打开两个浏览器窗口并快速刷新两个),我会看到:

Start request
Start request
Okay done now
Okay done now
Run Code Online (Sandbox Code Playgroud)

相反,我明白了

Start request
Okay done now
Start request
Okay done now
Run Code Online (Sandbox Code Playgroud)

这让我相信它在这种情况下实际上是阻塞的.为什么我的代码是阻塞的,我如何获得一些代码来做我期望的呢?我在Windows 7上使用核心i7获得相同的输出,并且我认为有两个核心的Linux Mint 13盒子.

编辑:

我找到了一种方法 - 如果有人能提供一种跨平台工作的方法(我不太担心性能,只是它是非阻塞的),我会接受这个答案.

python asynchronous tornado

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

Tornado 协程 - 自定义函数

我正在从 Tornado 理解协程,所以让我们保持一切简单,粘贴的代码越多越好。

我想要的是让我自制的函数异步。

我可以在文档中找到的所有示例都属于同一个“隐藏”部分:AsyncHTTPClient。我不打算进行 HTTP 调用。所以请不要给我举那个班级的例子。我有兴趣从头开始创造一些东西。我已经尝试了Tornado 协程的所有可能性

现在我一直在用 bash sleep 进行测试。这是代码:

import tornado.web
import tornado.httpserver
import tornado.gen
import tornado.concurrent
import subprocess
import os

@tornado.gen.coroutine
def letswait():
    fut = tornado.concurrent.Future()
    subprocess.check_output(["sleep", "5"])
    fut.set_result(42)
    return fut

class TestHandler1(tornado.web.RequestHandler):
    @tornado.gen.coroutine
    def get(self):
        value = yield letswait()
        self.render("test.html", num=value)

class TestHandler2(tornado.web.RequestHandler):
    def get(self):
        self.render("test.html", num=66)

class Application(tornado.web.Application):
    def __init__(self):
        DIRNAME = os.path.dirname(__file__)
        STATIC_PATH = os.path.join(DIRNAME, '../static')
        TEMPLATE_PATH = os.path.join(DIRNAME, '../template')
        sets = {
            "template_path":TEMPLATE_PATH,
            "static_path":STATIC_PATH,
            "debug":True,
        }
        tornado.web.Application.__init__(self, [
            (r"/test1", TestHandler1), …
Run Code Online (Sandbox Code Playgroud)

python asynchronous tornado

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

标签 统计

asynchronous ×2

python ×2

tornado ×2