ピラミッドビューでasyncioサブプロセスを実行しようとしていますが、ビューがハングし、非同期タスクが完了しないように見えます。私はピラミッドビューの外でこの例を実行することができ、それは動作します。それとピラミッドビューのAsyncioサブプロセスの使用
は、私はもともとloop = asyncio.get_event_loop()
を使用してテストしているが、これは、私は完全にここで理解していないものは確かにありますRuntimeError: There is no current event loop in thread 'Dummy-2'
私に語ったと述べました。ビュースレッドがメインスレッドと異なる場合がありますので、get_event_loop
は機能しません。
私の非同期タスクがこのシナリオでその結果をもたらさない理由を誰かが知っていますか?これは単純な例です。
@asyncio.coroutine
def async_task(dir):
# This task can be of varying length for each handled directory
print("Async task start")
create = asyncio.create_subprocess_exec(
'ls',
'-l',
dir,
stdout=asyncio.subprocess.PIPE)
proc = yield from create
# Wait for the subprocess exit
data = yield from proc.stdout.read()
exitcode = yield from proc.wait()
return (exitcode, data)
@view_config(
route_name='test_async',
request_method='GET',
renderer='json'
)
def test_async(request):
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
dirs = ['/tmp/1/', '/tmp/2/', '/tmp/3/']
tasks = []
for dir in dirs:
tasks.append(asyncio.ensure_future(async_task(dir), loop=loop))
loop.run_until_complete(asyncio.gather(*tasks))
loop.close()
return
ピラミッドフレームワークはasyncioと互換性がありません。それらを一緒に使用する理由はありません。 –
私はそれがこのようなものかもしれないと感じました。私はまだ興味があるのですか?私は、uWSGIサーバーがasyncioを使用するための実験的な機能を持っていることに気付きました。 – sdk900
No.ピラミッドはWSGIフレームワークです。 WSGIは標準定義と同期しています。 –