Проверьте, был ли файл записан за последние 5 минут, чтобы перезапустить, если скрипт застрял - PullRequest
0 голосов
/ 16 мая 2019

У меня есть бесконечный цикл while, который выбирает некоторые данные и записывает их в CSV. Иногда из-за случайной причины, скорее всего из-за нехватки памяти, скрипт застревает. Поэтому я попытался перезапустить сценарий, если это произойдет, с помощью проверяемого файла записи и этой функции перезапуска , которая используется дословно, я пришел к следующему код

from urllib2 import Request, urlopen
import pandas as pd

from datetime import datetime, timedelta
import time
import json
import os.path

import os
import sys
import psutil
import logging

currtime = time.localtime()
dct = time.strftime('%d%b%Y', currtime).upper()
datafile = 'Idx' + dct + '.csv'
csvfile = 'Index/' + datafile

ptime = datetime.now()
idx = pd.DataFrame()

last_size = os.stat(csvfile).st_size
last_time = ptime + timedelta(0,5*60)

while True:
    if (ptime.hour*60*60 + ptime.minute*60 + ptime.second) > stop:
        break
    else:
        try:
            ptime = datetime.now()
            idx = getIndexData()
            idx.to_csv(csvfile, index=False, mode='a', header=False)


            if not nosleep:
                end = datetime.now()
                tdiff = end-ptime
                time.sleep(scrapeGap - (tdiff.seconds + tdiff.microseconds*1.0/10**6))

        except Exception as e:
            with open("idx.log", "a") as lf:
                lf.write("Error at {0} \t {1}\n".format(str(ptime), str(e)))
            continue

        if ptime > last_time:
            if os.stat(csvfile).st_size - last_size > 0:
                continue
            else:
                restart_program()

            last_size = os.stat(csvfile).st_size
            last_time = ptime + timedelta(0,5*60)

Это правильный способ построить все это? У меня не было времени протестировать перезапуск скрипта, так как я не могу определенно заставить скрипт зависнуть.

Указатели о том, как получить информацию о том, что приводит к зависанию скрипта, также были бы очень полезны.

EDIT:

В ответ на вопрос @iAmTringOK пишется csv-файл

OI.call,changeOI.call,volume.call,IV.call,LTP.call,netChange.call,bidQ.call,bidP.call,askP.call,askQ.call,strike,bidQ.put,bidP.put,askP.put,askQ.put,netChange.put,LTP.put,IV.put,volume.put,changeOI.put,OI.put,timestamp
18300.0,-450.0,8.0,0.0,2474.85,43.1,75.0,2459.6,2471.6,600.0,9300.0,150.0,3.35,3.5,675.0,0.15,3.5,36.06,139.0,-6300.0,56625.0,2019-05-01 09:00:29.624
0.0,0.0,0.0,0.0,0.0,0.0,375.0,2261.9,2695.95,300.0,9350.0,300.0,0.1,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,2019-05-01 09:00:29.624
1125.0,0.0,0.0,0.0,2384.95,-0.55,75.0,2358.1,2383.65,75.0,9400.0,75.0,3.5,5.4,75.0,0.05,4.2,35.47,2.0,75.0,600.0,2019-05-01 09:00:29.624
0.0,0.0,0.0,0.0,0.0,0.0,375.0,2141.7,2555.9,4950.0,9450.0,150.0,0.55,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,2019-05-01 09:00:29.624
870225.0,4275.0,653.0,0.0,2264.95,-18.95,300.0,2264.1,2271.95,375.0,9500.0,2175.0,3.95,4.05,450.0,-0.55,3.95,33.75,1131.0,29100.0,293550.0,2019-05-01 09:00:29.624
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...