Отображение линейного графика не даёт запуститься другой функции, которая должна находиться в цикле, что делать?

Код должен при помощи функции "stocks" подгружать данные котировок в базу, поэтому он должен быть в цикле. А функция "grafic" создаёт линейный график меняющийся в реальном времени считывая данные из базы. НО ЭТИ ФУНКЦИИ НЕ МОГУТ РАБОТАТЬ ОДНОВРЕМЕННО. Если запустить сначала "grafic", то "stocks" не запускается. Если запустить цикл "stock", то не запускается "grafic"

# Подключаемся к Binance Api
from binance.client import Client
from binance.streams import BinanceSocketManager
# Работа со временем
import time
import datetime
# Работа с вычислениями
import matplotlib.pyplot as plt
import matplotlib.animation as animation
# Работа с базой данных
from SQ import SQLighter
# Многопоточность
from threading import Thread


# Api key
api_key = '*********'
# Secret Api key
api_secret = '*********'

# Подключаем базу данных

DATACRY = SQLighter('X:\\TELEGRAMM\\КРИПТА ПИТОН\\DATATRADE\\DATACRY.db')
pricesD = DATACRY.get_prices()
dateD = DATACRY.get_date()

# Работа с графиком
fig = plt.figure()
#creating a subplot 
ax1 = fig.add_subplot(1,1,1)

# Client
client = Client(api_key, api_secret)

# Рынок
ASSET = 'DOGEUSDT'
# Торгуемая валюта
CURRENCY = 'USDT'
# Торгуемая криптовалюта
CRYPTOCURRENCY = 'DOGE'
# Стартовый капитал криптовалюты
START_CRYPTOCURRENCY = 1

''' Б а л а н с '''
def balance(symbol):
    balance = client.get_asset_balance(asset=symbol)
    balance = {'free': balance['free'], 'locked':balance['locked']}
    return balance

''' И с т о р и я '''
def history(symbol):
    history = client.get_my_trades(symbol=symbol)
    return history

''' К у р с '''
def price(symbol):
    price = client.get_avg_price(symbol=symbol)['price']
    return float(price)

''' П о к у п к а '''
def order_market_buy(quantity):
    order = client.order_market_buy(symbol=ASSET, quantity=quantity)

''' П р о д а ж а '''
def order_market_sell(quantity):
    order = client.order_market_sell(symbol=ASSET, quantity=quantity)

# Время обновления курса
TIME = 1
# Процент при котором будет совершена  покупка
GROW_PERCENT = 0.5
# Процент при котором будет совершена продажа
FALL_PERCENT = -0.25



''' А л г о р и т м '''
def stocks(FIRST_PRICE): 

    # Функция обрезает число до n кол-во символов(Нужна чтобы при покупки и продажи не возникло ошибки)
    def toFixed(f: float, n=0):
        a, b = str(f).split('.')
        return '{}.{}{}'.format(a, b[:n], '0'*(n-len(b)))

    # Узнаём дату и время цены
    now = datetime.datetime.now()
    FULLDATE = now.strftime("%d.%m.%Y / %H:%M:%S")
    date = now.strftime('%d')
    month = now.strftime('%m')
    year = now.strftime('%Y')
    hour = now.strftime('%H')
    minutes = now.strftime('%M')
    seconds = now.strftime('%S')

    # Засыпаем
    time.sleep(TIME)
    # Получаем новую цену
    PRICEnow = price(ASSET)

    # Процентное изменение
    PROCENT = ((PRICEnow - FIRST_PRICE) / FIRST_PRICE) * 100
    # Сумма начального депозита в USDT
    BANKUSD = 666
    # КОЛИЧЕСТВО ЕДИНИЦ КРИПТОВАЛЮТЫ
    BANKCRYP = (BANKUSD / START_PRICE)
    # Сумма депозита в USD в реальном времени
    BANKUSDLIVE = PRICEnow*BANKCRYP
    # Расчёт прибыли
    STOCK = (BANKUSDLIVE - BANKUSD)

    # Заносим котировки в базу
    date = FULLDATE
    prices = PRICEnow
    DATACRY.add_info(date, prices)

    print('Цена: '+ str(PRICEnow), 'Средства: '+ str(BANKUSDLIVE)+' $', 'Прибыль: '+ str(STOCK)+' $  ', str(FULLDATE))
# Стартовые значения
START_PRICE = price(ASSET)


# ГРАФИК
def animate(i):

    ys = sum(map(list, pricesD), [])

    xs = sum(map(list, dateD), [])
        
        
    ax1.clear()
    ax1.plot(xs, ys)

    plt.xlabel('Date')
    plt.ylabel('Price')
    plt.title('Live graph with matplotlib') 
    
ani = animation.FuncAnimation(fig, animate, interval=1000) 
plt.show()

    # Запускаем цикл
while True:
    stocks(START_PRICE)

Ответы (0 шт):