私はFlask
ウェブサーバーを使用して時間のかかる計算を行うインターフェイスを提供しています。パフォーマンスを向上させるために、私は非同期asyncio
を呼び出すにはasyncio
flask-aiohttpを使用した非同期サブプロセス
を使用して
-
にしたいですFlask Iのコルーチンは、
flask-aiohttp
を使い始めました。これは、例に示すように単純な遅延タスクでうまく動作しています。
#!/usr/bin/env python3
# coding: utf-8
from flask import Flask
from flask.ext.aiohttp import AioHTTP, async
import asyncio
from asyncio.subprocess import PIPE
CALC_SCRIPT = './calc'
app = Flask(__name__)
aio = AioHTTP(app)
@app.route('/calc/<int:n>')
@async
def calc(n):
print('calc({}) called'.format(n))
create = asyncio.create_subprocess_exec(CALC_SCRIPT, str(n),
stdout=PIPE, stderr=PIPE)
print('create... ', end='')
process = yield from create
print('process created. {!r}, type={}'.format(process,
type(process)))
yield from process.wait()
print('process finished.')
# yields (stdout, stderr)
result = '\n'.join(ch.decode().rstrip() for ch in
(yield from process.communicate()) if ch)
return result
if __name__ == '__main__':
aio.run(app, debug=True)
プロセスが作成されているが、決して返しません: しかし、私は、フラスコ内からの非同期サブプロセスを呼び出すことができない私は間違って何をやっている
GET http://127.0.0.1:5000/calc/5
calc(5) called
creating... process created. <Process 5647>,
type=<class 'asyncio.subprocess.Process'>
?
これですでに考えていると思いますが、* CALC_SCRIPT *は何をしますか?階乗などの単純な関数でテストしていますか? – wgwz
これは役に立ちます:http://stackoverflow.com/questions/24541192/python-asyncio-subprocess-never-finishes – wgwz
はい、 'CALC_SCRIPT'は[slow fibonacci script]です(https://gitlab.com/snippets/11746)をテスト目的で使用します。私はあなたがリンクした質問を見つけたが、私の[スタンドアロン版](https://gitlab.com/snippets/11748)はうまくいきました。 – Finwood