質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.49%

Python3 ターミナル上での実行プログラム停止問題

解決済

回答 1

投稿

  • 評価
  • クリップ 3
  • VIEW 2,666

score 27

 前提・実現したいこと

システムトレード(仮想通貨など)の練習用にバックテストを行っています。

目的はプログラムをターミナル上で稼働させ続けたいのですが、
数時間稼働させていると下記のようなエラーになります。

質問内容
エラーを調べると、恐らくメモリーが関連しているのかと思いましたが、
そのあたりの知識が無いので、エラーの解決方法を教えて頂けると助かります。

もしくは
(下の方にコードの大枠を記載させて頂きましたが)
そもそもプログラムを稼働させ続ける(手動で停止するまで)のに
while true...time.sleepという使い方が良くない(メモリなどの関係上)場合は、一般的にどのような方法が良いのかアドバイスを頂きたいです。

環境

Python 3.6.3 |Anaconda custom (64-bit)| Ubuntu

 発生している問題・エラーメッセージ

エラーメッセージ (長いので繰り返しのような部分は削除しています)

*** Error in `python3': corrupted size vs. prev_size: 0x000055ec40ddddf0 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x777e5)[0x7fa577f707e5]
/lib/x86_64-linux-gnu/libc.so.6(+0x82aec)[0x7fa577f7baec]
/lib/x86_64-linux-gnu/libc.so.6(__libc_malloc+0x54)[0x7fa577f7d184]
/home/bob/yes/lib/python3.6/lib-dynload/../../libcrypto.so.1.0.0(CRYPTO_malloc+0x58)[0x7fa575b07918]
/home/bob/yes/lib/python3.6/lib-dynload/../../libcrypto.so.1.0.0(BUF_MEM_grow+0xe5)[0x7fa575babef5]
/home/bob/yes/lib/python3.6/lib-dynload/../../libcrypto.so.1.0.0(+0x1360d7)[0x7fa575bd70d7]
/home/bob/yes/lib/python3.6/lib-dynload/../../libcrypto.so.1.0.0(ASN1_item_ex_d2i+0x166)[0x7fa575bddd26]
/home/bob/yes/lib/python3.6/lib-dynload/../../libcrypto.so.1.0.0(+0x13d9ea)[0x7fa575bde9ea]
/home/bob/yes/lib/python3.6/lib-dynload/../../libcrypto.so.1.0.0(+0x13dc10)[0x7fa575bdec10]
/home/bob/yes/lib/python3.6/lib-dynload/../../libcrypto.so.1.0.0(ASN1_item_ex_d2i+0x6fd)[0x7fa575bde2bd]
/home/bob/yes/lib/python3.6/lib-dynload/../../libcrypto.so.1.0.0(+0x13d9ea)[0x7fa575bde9ea]
/home/bob/yes/lib/python3.6/lib-dynload/../../libcrypto.so.1.0.0(+0x13dc10)[0x7fa575bdec10]
/home/bob/yes/lib/python3.6/lib-dynload/../../libcrypto.so.1.0.0(ASN1_item_ex_d2i+0x6fd)[0x7fa575bde2bd]
/home/bob/yes/lib/python3.6/lib-dynload/../../libcrypto.so.1.0.0(ASN1_item_d2i+0x4c)[0x7fa575bde75c]
/home/bob/yes/lib/python3.6/lib-dynload/../../libcrypto.so.1.0.0(PEM_X509_INFO_read_bio+0x1f6)[0x7fa575bea8b6]
/home/bob/yes/lib/python3.6/lib-dynload/../../libcrypto.so.1.0.0(X509_load_cert_crl_file+0x4e)[0x7fa575bfaece]
/home/bob/yes/lib/python3.6/lib-dynload/../../libcrypto.so.1.0.0(+0x15a073)[0x7fa575bfb073]
/home/bob/yes/lib/python3.6/lib-dynload/../../libcrypto.so.1.0.0(X509_STORE_load_locations+0x42)[0x7fa575bf0a82]
/home/bob/yes/lib/python3.6/site-packages/cryptography/hazmat/bindings/_openssl.abi3.so(+0x632dc)[0x7fa5726b92dc]
python3(_PyCFunction_FastCallDict+0x91)[0x55ec3ec2e7d1]
python3(+0x19e17c)[0x55ec3ecbe17c]
python3(_PyEval_EvalFrameDefault+0x30a)[0x55ec3ece0bba]
python3(+0x197354)[0x55ec3ecb7354]
python3(+0x19824f)[0x55ec3ecb824f]
python3(+0x19e255)[0x55ec3ecbe255]
python3(_PyEval_EvalFrameDefault+0x30a)[0x55ec3ece0bba]
python3(+0x197354)[0x55ec3ecb7354]
python3(+0x19824f)[0x55ec3ecb824f]
python3(+0x19e255)[0x55ec3ecbe255]

............

7fa577189000-7fa57718a000 r--p 00002000 08:01 24118224                   /home/yes/lib/python3.6/lib-dynload/_heapq.cpython-36m-x86_64-linux-gnu.so
7fa57718a000-7fa57718c000 rw-p 00003000 08:01 24118224                   /home/yes/lib/python3.6/lib-dynload/_heapq.cpython-36m-x86_64-linux-gnu.so
7fa57718c000-7fa57720c000 rw-p 00000000 00:00 0 
7fa57720c000-7fa5775e1000 r--p 00000000 08:01 2885087                    /usr/lib/locale/locale-archive
7fa5775e1000-7fa5776e9000 r-xp 00000000 08:01 10355986                   /lib/x86_64-linux-gnu/libm-2.23.so
7fa5776e9000-7fa5778e8000 ---p 00108000 08:01 10355986                   /lib/x86_64-linux-gnu/libm-2.23.so
7fa5778e8000-7fa5778e9000 r--p 00107000 08:01 10355986                   /lib/x86_64-linux-gnu/libm-2.23.so
7fa5778e9000-7fa5778ea000 rw-p 00108000 08:01 10355986                   /lib/x86_64-linux-gnu/libm-2.23.so
7fa5778ea000-7fa5778f1000 r-xp 00000000 08:01 10359434                   /lib/x86_64-linux-gnu/librt-2.23.so
7fa5778f1000-7fa577af0000 ---p 00007000 08:01 10359434                   /lib/x86_64-linux-gnu/librt-2.23.so
7fa577af0000-7fa577af1000 r--p 00006000 08:01 10359434                   /lib/x86_64-linux-gnu/librt-2.23.so
7fa577af1000-7fa577af2000 rw-p 00007000 08:01 10359434                   /lib/x86_64-linux-gnu/librt-2.23.so
7fa577af2000-7fa577af4000 r-xp 00000000 08:01 10359401                   /lib/x86_64-linux-gnu/libutil-2.23.so
7fa577af4000-7fa577cf3000 ---p 00002000 08:01 10359401                   /lib/x86_64-linux-gnu/libutil-2.23.so
7fa577cf3000-7fa577cf4000 r--p 00001000 08:01 10359401                   /lib/x86_64-linux-gnu/libutil-2.23.so
7fa577cf4000-7fa577cf5000 rw-p 00002000 08:01 10359401                   /lib/x86_64-linux-gnu/libutil-2.23.so
7fa577cf5000-7fa577cf8000 r-xp 00000000 08:01 10359396                   /lib/x86_64-linux-gnu/libdl-2.23.so
7fa577cf8000-7fa577ef7000 ---p 00003000 08:01 10359396                   /lib/x86_64-linux-gnu/libdl-2.23.so
7fa577ef7000-7fa577ef8000 r--p 00002000 08:01 10359396                   /lib/x86_64-linux-gnu/libdl-2.23.so
7fa577ef8000-7fa577ef9000 rw-p 00003000 08:01 10359396                   /lib/x86_64-linux-gnu/libdl-2.23.so
7fa577ef9000-7fa5780b9000 r-xp 00000000 08:01 10359394                   /lib/x86_64-linux-gnu/libc-2.23.so
7fa5780b9000-7fa5782b9000 ---p 001c0000 08:01 10359394                   /lib/x86_64-linux-gnu/libc-2.23.so
7fa5782b9000-7fa5782bd000 r--p 001c0000 08:01 10359394                   /lib/x86_64-linux-gnu/libc-2.23.so
7fa5782bd000-7fa5782bf000 rw-p 001c4000 08:01 10359394                   /lib/x86_64-linux-gnu/libc-2.23.so
7fa5782bf000-7fa5782c3000 rw-p 00000000 00:00 0 
7fa5782c3000-7fa5782db000 r-xp 00000000 08:01 10359393                   /lib/x86_64-linux-gnu/libpthread-2.23.so
7fa5782db000-7fa5784da000 ---p 00018000 08:01 10359393                   /lib/x86_64-linux-gnu/libpthread-2.23.so
7fa5784da000-7fa5784db000 r--p 00017000 08:01 10359393                   /lib/x86_64-linux-gnu/libpthread-2.23.so
7fa5784db000-7fa5784dc000 rw-p 00018000 08:01 10359393                   /lib/x86_64-linux-gnu/libpthread-2.23.so
7fa5784dc000-7fa5784e0000 rw-p 00000000 00:00 0 
7fa5784e0000-7fa578506000 r-xp 00000000 08:01 10355998                   /lib/x86_64-linux-gnu/ld-2.23.so
7fa578524000-7fa5786e9000 rw-p 00000000 00:00 0 
7fa5786fb000-7fa5786fc000 rw-p 00000000 00:00 0 
7fa5786fc000-7fa5786fe000 rwxp 00000000 00:00 0 
7fa5786fe000-7fa578705000 r--s 00000000 08:01 3150975                    /usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache
7fa578705000-7fa578706000 r--p 00025000 08:01 10355998                   /lib/x86_64-linux-gnu/ld-2.23.so
7fa578706000-7fa578707000 rw-p 00026000 08:01 10355998                   /lib/x86_64-linux-gnu/ld-2.23.so
7fa578707000-7fa578708000 rw-p 00000000 00:00 0 
7fff6f6c5000-7fff6f6e6000 rw-p 00000000 00:00 0                          [stack]
7fff6f756000-7fff6f759000 r--p 00000000 00:00 0                          [vvar]
7fff6f759000-7fff6f75b000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]
中止 (コアダンプ)

 プログラムの内容

各取引所のAPIからtickerで価格データを取得しています。
データ取得の間隔は5秒間隔です。

たまにtickerで情報が上手く取れない場合があるので、
retryライブラリを用いて、エラーが出た場合は再実行されるようにしています。

このファイルをターミナル上で、python3 ファイル名で実行しています。

 ソースコードの大枠

def bitflyer():
    URL = "https://lightning.bitflyer.jp/v1/getticker"
    ticker = requests.get(URL).json()
    price = int(ticker["best_ask"]),int(ticker["best_bid"])
    return price

def coincheck():
    URL = 'https://coincheck.com/api/ticker'
    ticker = requests.get(URL).json() 
    price = int(ticker['ask']),int(ticker['bid'])
    return price

logging.config.fileConfig(path)
logger = logging.getLogger()

Tiem = 5
@retry(delay=Time)
def main():
    while True:

  #...バックテストの処理コード...

        logger.log(20,msg2)
        gc.collect()
        time.sleep(Time)

if __name__ == "__main__":
    main()

試したこと

ターミナルではなく、jupyter notebookで試してみましたが、
数時間でkernel deadとなり、プログラムが強制終了しました。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • umyu

    2018/02/20 16:49 編集

    1,数時間稼働とはおおよその範囲でいいのですが、何時間ぐらいでしょうか? 2,requests.get(URL)の部分をwith文で囲って Responseオブジェクトをcloseする形にしても問題は発生しますか?

    キャンセル

  • MF_19

    2018/02/20 21:16

    回答ありがとうございます。 7時間程度だったかと思います。 2のご提案ありがとうございます、試してみます。

    キャンセル

回答 1

checkベストアンサー

+3

提示ログ

/home/bob/yes/lib/python3.6/site-packages/cryptography/hazmat/bindings/_openssl.abi3.so(+0x632dc)[0x7fa5726b92dc]


よりCryptography内あるいはその呼出元のコードに問題がある可能性があります。

CryptographyRequestsから呼び出されているとすれば、消極的な対応ですが

  • 接続(セッション)を毎回切断する(with構文を利用)
  • サーバーSSL証明書を検証しないようにする(verify=Falseを指定)

ことでエラーを回避できるかもしれません。(回避できないかもしれません)
参考:Advanced Usage

import requests

def bitflyer():
    URL = "https://lightning.bitflyer.jp/v1/getticker"
    with requests.Session() as s:
        ticker = s.get(URL, verify=False).json()
        # 略

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/02/20 21:18

    詳細のご提案ありがとうございます。SSLはセキュリティ的に怖いので止めておきますが、そういった方法もあるのかと勉強になりました。 しばらくご提案頂いたセッション切断で回してみます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る