· 5 years ago · Jun 24, 2020, 02:22 PM
1import time
2import requests
3import threading
4import sqlite3
5import threading
6
7lock = threading.Lock()
8
9
10c1 = 'ETH'
11c2 = 'BTC'
12
13"""
14Создаем базу, подключаемся к ней и создаем таблицы
15"""
16
17conn = sqlite3.connect('bitbinexi.bd', check_same_thread=False)
18table_cr = """
19CREATE TABLE IF NOT EXISTS
20 rates (
21 pair TEXT,
22 rate REAL,
23 stock TEXT,
24 received DEFAULT (datetime('now','localtime'))
25 );
26"""
27cursor = conn.cursor()
28cursor.executescript(table_cr)
29
30
31# Глобальный словарь, куда каждый поток складывает полученную информацию
32stock_rates = {'bittrex': 0}
33
34# Получить последнюю цену с Bittrex
35def get_bittrex_rates(pair):
36 while True:
37 try:
38 bittrex_rate = requests.get("https://bittrex.com/api/v1.1/public/getticker?market={pair}".format(pair=pair)).json()['result']['Last']
39 # В bittrex_rate сейчас лежит последний курс
40 stock_rates['bittrex'] = bittrex_rate
41
42 try:
43 lock.acquire(True)
44 cursor.execute("""
45 INSERT INTO rates (pair, stock, rate)
46 VALUES ('{pair}', '{stock}', '{rate}')
47 """.format(
48 pair=pair,
49 stock='Bittrex',
50 rate = float(bittrex_rate)
51 ))
52 conn.commit()
53 finally:
54 lock.release()
55
56 except Exception as e:
57 print(e)
58 time.sleep(0.5)
59
60def show_results():
61 while True:
62 print(stock_rates)
63 time.sleep(1)
64
65global_start_time = time.time()
66
67threads = []
68
69# Подготавливаем потоки, складываем их в массив
70bittrex_thread = threading.Thread(target=get_bittrex_rates, args=(c2+'-'+c1,))
71show_results_thread = threading.Thread(target=show_results)
72
73threads.append(bittrex_thread)
74threads.append(show_results_thread)
75
76# Запускаем каждый поток
77for thread in threads:
78 thread.start()
79
80# Ждем завершения каждого потока
81for thread in threads:
82 thread.join()