【问题标题】:Can Python's AsyncIO be used within an existing web application?Python 的 AsyncIO 可以在现有的 Web 应用程序中使用吗?
【发布时间】:2014-10-20 07:18:10
【问题描述】:

我知道 AsyncIO WSGI 插件仍在创建过程中 (http://uwsgi-docs.readthedocs.org/en/latest/asyncio.html)。我只是在考虑在现有 Web 项目中使用它的可行性。

似乎第一个问题是在哪里管理事件循环。 WSGI 请求是全部在单个线程上完成的,还是它们自己的线程?

我想使用它的一种方法是,如果单个请求有多个可以以非阻塞方式执行的任务,那可能很有用。例如,如果一个请求需要发出并从网络上的另一个位置检索多个文件。您可以在请求中创建一个事件循环,以便更有效地执行集合非阻塞操作。

这是目前在现有 Web 项目中真正利用 AsyncIO 的唯一方法吗?

【问题讨论】:

  • 所以你想写一个事件网络服务器?
  • 最终是的,尽管我更感兴趣的是了解它如何(如果有的话)在“旧版”网络应用程序中使用

标签: python web-applications wsgi uwsgi python-asyncio


【解决方案1】:

您可以像这样将阻塞任务“转换”为非阻塞任务:

我建议这样做: https://docs.python.org/3/library/asyncio-eventloop.html#executor

我有一个监听 twitter 提要的函数,函数“提及”,我在执行程序中运行它,

@asyncio.coroutine
def boucle_un():
    while True:
        print("debut du un")
        value = t.next()
        future1 = loop.run_in_executor(None, mention,20, value)
        response1 = yield from future1
        yield from asyncio.sleep(5)
        print("fin du un")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-14
    • 2010-10-23
    • 1970-01-01
    • 2013-07-24
    • 1970-01-01
    • 2011-06-05
    • 2013-07-15
    相关资源
    最近更新 更多