可以在现有的Web应用程序中使用Python的AsyncIO吗?

时间:2014-08-26 20:36:12

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

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

似乎头号问题是管理事件循环的位置。 WSGI请求是在一个线程上完成的,还是它们自己的线程?

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

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

1 个答案:

答案 0 :(得分: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")