프로젝트

일반

사용자정보

U 실시간 데이터 출력(기본) » 이력 » 버전 1

이태훈, 2025/02/10 02:43

1 1 이태훈
h1. 실시간 데이터 출력(기본)
2
3
h3. 소스코드
4
5
<pre>
6
import multiprocessing as mp
7
import websockets
8
import asyncio
9
import json
10
import sys
11
from PyQt5.QtWidgets import *
12
from PyQt5.QtCore import *
13
14
async def upbit_ws_client(q):
15
    uri = "wss://api.upbit.com/websocket/v1"
16
17
    async with websockets.connect(uri) as websocket:
18
        subscribe_fmt = [
19
            {"ticket":"test"},
20
            {
21
                "type":"ticker",
22
                "codes":["KRW-BTC"],
23
                "isOnlyRealtime":True
24
            },
25
            {"format":"SIMPLE"}
26
        ]
27
        subscribe_data = json.dumps(subscribe_fmt)
28
        await websocket.send(subscribe_data)
29
30
        while True:
31
            data = await websocket.recv()
32
            data = json.loads(data)
33
            q.put(data)
34
35
async def main(q):
36
    await upbit_ws_client(q)
37
38
def producer(q):
39
    asyncio.run(main(q))
40
41
class Consumer(QThread):
42
    poped = pyqtSignal(dict)
43
44
    def __init__(self, q):
45
        super().__init__()
46
        self.q = q
47
48
    def run(self):
49
        while True:
50
            if not self.q.empty():
51
                data = q.get()
52
                self.poped.emit(data)
53
54
class MyWindow(QMainWindow):
55
    def __init__(self, q):
56
        super().__init__()
57
        self.setGeometry(200, 200, 400, 200)
58
        self.setWindowTitle("Upbit Websocket")
59
60
        # thread for data consumer
61
        self.consumer = Consumer(q)
62
        self.consumer.poped.connect(self.print_data)
63
        self.consumer.start()
64
65
        # widget
66
        self.label = QLabel("Bitcoin: ", self)
67
        self.label.move(10, 10)
68
69
        # QLineEdit
70
        self.line_edit = QLineEdit(" ", self)
71
        self.line_edit.resize(150, 30)
72
        self.line_edit.move(100, 10)
73
74
    @pyqtSlot(dict)
75
    def print_data(self, data):
76
        current_price = int(data.get('tp'))
77
        self.line_edit.setText(format(current_price, ",d"))
78
79
if __name__ == "__main__":
80
    q = mp.Queue()
81
    p = mp.Process(name="Producer", target=producer, args=(q,), daemon=True)
82
    p.start()
83
84
    # Main process
85
    app = QApplication(sys.argv)
86
    mywindow = MyWindow(q)
87
    mywindow.show()
88
    app.exec_()
89
</pre>
90
91
h3. 결과
92
93
!clipboard-202502101143-pjsmq.png!