Python Flask停止异步循环

时间:2018-08-14 07:53:00

标签: python flask python-asyncio

我尝试创建一个Flask rest API,并在工作后进行一些asyncio循环。我正在测试它,每次看到loop.create_task()并且task像烧瓶服务器一样开始运行它时,都可以看到它。

他是我的代码:

async def hello_world(sc):
    await asyncio.sleep(sc)
    print("Hello World!",sc)

loop = asyncio.get_event_loop()
loop.create_task(hello_world(2))
loop.create_task(hello_world(4))
loop.create_task(hello_world(5))
loop.create_task(hello_world(1))
loop.create_task(hello_world(9))
print("fffffffffffffffffffff")

api.start_server()

我得到以下结果:

 python main.py
 fffffffffffffffffffff
 * Serving Flask app "api" (lazy loading)
 [...]

我期望这样的事情:

python main.py
fffffffffffffffffffff
* Serving Flask app "api" (lazy loading)
[...]
Hello World! 1
Hello World! 2
Hello World! 4
Hello World! 5
Hello World! 9

编辑

我得到的更精确的例子:

import asyncio

async def hello_world(sc):
   await asyncio.sleep(sc)
   print("Hello World!",sc)

async def timer():
    times = 0
    while True:
        await asyncio.sleep(1)
        print(times)
        times +=1

loop = asyncio.get_event_loop()
loop.create_task(timer())
loop.run_until_complete(asyncio.gather(
    hello_world(3),
    hello_world(2), 
    hello_world(4),
    hello_world(5),
))
print("fffffffffffffffffffff")

api.start_server()

我得到了:

λ python main.py
0
Hello World! 2
1
Hello World! 3
2
Hello World! 4
3
Hello World! 5
4
fffffffffffffffffffff
* Serving Flask app "api" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: on
0
Hello World! 2
1
Hello World! 3
2
Hello World! 4
3
Hello World! 5
4
fffffffffffffffffffff

为什么要停止打印timer()功能?

0 个答案:

没有答案