2017-04-17 6 views
0

私のsanicアプリケーションで非同期rawソケットを使用しようとしましたPython 3.6 curioからの非同期関数がサニックス非同期コンテキストでは機能しないことに本当に驚きました。コンセプトの最小限の証拠:古典をサニックスでも使えますか?何故なの?

import curio 
from sanic import Sanic 
from sanic.response import text 
app = Sanic(__name__) 


@app.route('/') 
async def index(request): 
    sock = await curio.open_connection("google.com", 443, ssl=True) 
    resp = await sock.recv(1024) 
    return text(resp) 


app.run(host="0.0.0.0", port=5001) 

このコードはOPによって提起されたgithubの問題、でこの質問を結ぶために、任意のHTTPリクエスト

$ python3 test2.py 
2017-04-17 17:33:13,266: INFO: Goin' Fast @ http://0.0.0.0:5001 
2017-04-17 17:33:13,270: INFO: Starting worker [93060] 
Fatal Python error: GC object already tracked 

Current thread 0x00007fc57706e480 (most recent call first): 
    File "/usr/lib/python3.6/linecache.py", line 165 in lazycache 
    File "/usr/lib/python3.6/traceback.py", line 345 in extract 
    File "/usr/lib/python3.6/traceback.py", line 497 in __init__ 
    File "/usr/lib/python3.6/traceback.py", line 117 in format_exception 
    File "/usr/lib/python3.6/traceback.py", line 163 in format_exc 
    File "/usr/lib/python3.6/site-packages/sanic/handlers.py", line 93 in default 
    File "/usr/lib/python3.6/site-packages/sanic/handlers.py", line 70 in response 
    File "/usr/lib/python3.6/site-packages/sanic/app.py", line 472 in handle_request 
    File "/usr/lib/python3.6/site-packages/sanic/server.py", line 410 in serve 
    File "/usr/lib/python3.6/site-packages/sanic/app.py", line 561 in run 
    File "test2.py", line 14 in <module> 
Aborted (core dumped) 

答えて

1

にコア・ダンプを生成します。

Using curio in sanic controller。 (問題のコメントから)

サムアップ:公式キュリオドキュメントから

: 「キュリオも、それは別のスレッドで個別に実行している必要があります提供してasyncioイベントループに作品を提出することができます。 "イベントの

Look at this issue

キュリオの主な実装は、キュー、ないイベントループです。あなたは同じスレッドSanic(そしてイベントループ)内でタスクを起動しようとしています。

関連する問題