Как я могу запустить функцию таймера в python bottle? - PullRequest
0 голосов
/ 03 марта 2020

Я хотел бы напечатать 't' и 's' на локальном хосте. Но это не работает с функцией таймера. Вот что я попробовал.

import requests
import pandas as pd
import time
from bottle import route, run

def timer(n):
    while True:
        url2 = 'https://api.bittrex.com/api/v1.1/public/getticker?market=USDT-BTC'
        res = requests.get(url2).json()
        BTC = pd.json_normalize(res['result'])
        t = time.ctime()
        s = BTC.to_html(index=False)
        time.sleep(n)
timer(5)

@route('/')
def index():
    return t, s
run(host='localhost', port=8080)

1 Ответ

0 голосов
/ 04 марта 2020

Без подробностей о том, что именно не работает, сложно дать исчерпывающий ответ. Но одна вещь, которая обязательно должна измениться, это то, где вы определяете t и s. Как пишет @Pygirl в своем комментарии, вам нужно определить их глобально:

import requests
import pandas as pd
import time
from bottle import route, run

t = ''
s = ''

def timer(n):
    while True:
        url2 = 'https://api.bittrex.com/api/v1.1/public/getticker?market=USDT-BTC'
        res = requests.get(url2).json()
        BTC = pd.json_normalize(res['result'])

        # Must declare t and s as globals since you're changing their referents.
        global t
        global s
        t = time.ctime()
        s = BTC.to_html(index=False)

        time.sleep(n)

timer(5)

@route('/')
def index():
    return '{}: {}'.format(t, s)
run(host='localhost', port=8080)

Альтернативой их глобальному определению является создание диктанта верхнего уровня с двумя элементами в нем (t и s) и просто измените эти элементы по мере необходимости; в этом случае global не требуется.

...