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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Q&A

解決済

1回答

4392閲覧

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

MF_19

総合スコア27

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

0グッド

3クリップ

投稿2018/02/20 02:26

前提・実現したいこと

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

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

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

もしくは
(下の方にコードの大枠を記載させて頂きましたが)
そもそもプログラムを稼働させ続ける(手動で停止するまで)のに
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 ファイル名で実行しています。

ソースコードの大枠

python

1def bitflyer(): 2 URL = "https://lightning.bitflyer.jp/v1/getticker" 3 ticker = requests.get(URL).json() 4 price = int(ticker["best_ask"]),int(ticker["best_bid"]) 5 return price 6 7def coincheck(): 8 URL = 'https://coincheck.com/api/ticker' 9 ticker = requests.get(URL).json() 10 price = int(ticker['ask']),int(ticker['bid']) 11 return price 12 13logging.config.fileConfig(path) 14logger = logging.getLogger() 15 16Tiem = 5 17@retry(delay=Time) 18def main(): 19 while True: 20 21  #...バックテストの処理コード... 22 23 logger.log(20,msg2) 24 gc.collect() 25 time.sleep(Time) 26 27if __name__ == "__main__": 28 main()

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

umyu

2018/02/20 07:52 編集

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

2018/02/20 12:16

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

回答1

0

ベストアンサー

提示ログ

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

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

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

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

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

Python

1import requests 2 3def bitflyer(): 4 URL = "https://lightning.bitflyer.jp/v1/getticker" 5 with requests.Session() as s: 6 ticker = s.get(URL, verify=False).json() 7 # 略

投稿2018/02/20 09:29

can110

総合スコア38234

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MF_19

2018/02/20 12:18

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問