40798


python初心者です。  
やりたいことは、仮想通貨の取引所APIから通貨の価格を取得して、こちらで作成したhtmlに反映・まとめてをして、webページ（herokuを利用）を作成することです。  
ローカルホストではうまくいっているのですが、heroku上ではcode=H12,desc=Request
timeoutのエラーが出てしまいます。どうすればtimeoutを回避できるか、具体的な方法をご教示願えますでしょうか。以下がソースコードです。

[code]

        #app.py
        from flask import Flask, render_template
        from getprice import *
    
        app=Flask(__name__)
    
        @app.route('/')
        def layout():
            return render_template("layout.html",co=dict_co())
            #dict_co()は取引所APIにリクエストして価格を取得する関数。getprice.pyに記載。
    
        if __name__ == "__main__":
            app.run(debug=True)
    
[/code]

[code]

        #getprice.py
        def dict_co():
        try:
            r=requests.get('https://coincheck.com/api/ticker')
            if r.status_code == 200:
                j=r.json()
    
            cc={"btc_jpy": [round(float(j["bid"])),round(float(j["ask"]))]}
            return (cc)
    
        except:
            return (0) 
    
[/code]

[code]

        #layout.html
        <!DOCTYPE html>
        <html>
        <header>Test Page</header>
        <body>
            <div class="container">
                <table class="tabletype">
                    <tr>
                        <th></th>
                        <th>bid</th>
                        <th>ask</th>
                    </tr>
                    <tr>
                        <td>Coinone</td>
                        <td>{{"%s" % (co["btc_jpy"][0])}}</td>
                        <td>{{"%s" % (co["btc_jpy"][1])}}</td>
                    </tr>
                </table>
            </div>
        </body>
        </html>
    
[/code]

そもそも考え方が違っていたり、他に良いやり方があるようでしたら、そちらもご教示頂きたく。よろしくお願いします。


CC BY-SA 3.0
2018-01-07T11:24:24.973
40794
2018-01-07T12:53:46.473
26524
question
html python3 heroku flask
request.getsで集めた情報を集約してhtmlに表示させる方法


[`code=H12,desc=Request timeout`](https://devcenter.heroku.com/articles/error-
codes#h12-request-timeout) は heroku ルータによって出力されているようですね。

[Request Timeout | Heroku Dev
Center](https://devcenter.heroku.com/articles/request-timeout)
によると、タイムアウト値自体は変更できないみたいです（少なくとも上限を伸ばす方には）。

> The timeout value is not configurable.

その代わりにバックグラウンドタスクで実行する事を勧めています。

> If your server requires longer than 30 seconds to complete a given request,
> we recommend moving that work to a background task or worker to periodically
> ping your server to see if the processing request has been finished.  
>  （中略）  
>  If so, you should move this heavy lifting into a background job which can
> run asynchronously from your web request. See [Worker Dynos, Background Jobs
> and Queueing](https://devcenter.heroku.com/articles/background-jobs-
> queueing) for details.

本件に関しても、リモート API へのアクセスは Web
サーバへのリクエストとは非同期にバックグラウンドで行っておき、取得データをキャッシュ（又は永続化）しておいて Web
リクエスト時にそれを使用する、というのはどうでしょうか。

Qiita に関連記事がありましたので、参考にしてみて下さい。  
[Herokuにバックグラウンド処理をさせる with Python -
Qiita](https://qiita.com/serinuntius/items/5d6d560ff75f7b42f92d)


CC BY-SA 3.0
2018-01-07T12:53:46.473
40798
2018-01-07T12:53:46.473
26808
40794
answer