aiohttpを使用して、TCPリクエストを別のサーバーに送信するAPIサーバーを構築しています。 TCPリクエストを送信するモジュールは、私の目的のために同期とブラックボックスです。だから私の問題は、これらの要求がAPI全体をブロックしているということです。私はモジュールのリクエストを非同期コルーチンに包み込み、残りのAPIをブロックしない方法が必要です。同期関数を非同期コルーチンにラップする方法はありますか?
それでは、簡単な例としてsleep
を使用して、何とか非ブロックコルーチンに時間のかかる同期コードをラップする方法があり、このような何か:
async def sleep_async(delay):
# After calling sleep, loop should be released until sleep is done
yield sleep(delay)
return 'I slept asynchronously'
。コラボレーションがブロックされると、要求が完了した後にのみ制御(yield)が返されるため、協調マルチタスクでは、望ましい動作を得ることができません。 –
aiohttpはhttpに適しています。 http以外のTCPの場合、asyncioで十分です。 – Udi