QEventloop에 대한 이해가 부족해서 간단한 예시를 만들어 보았다.
- timer0, timer1, timer2를 순차적으로 등록 실행하고 1초마다 실행한다.
- timer0은 check변수를 1씩 더하고 10이 되면 QEventloop를 종료시킨다.
- timer1은 무조건 실행
- timer2는 eventloop가 실행되고 있지 않을때만 print
- create_event_loop함수를 통해 QEventloop를 실행하고 이 이벤트루프가 timer0에 의해 종료되는 시점까지 create_event_loop함수는 대기하고 있다가 '이벤트루프종료'라는 메세지를 출력한다.
- run_other함수는 create_event_loop함수 내에서 이벤트루프가 종료되기 전에 실행되지 않는다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
# -*- coding: utf-8 -*-
import sys
from PyQt5.QAxContainer import QAxWidget
from PyQt5.QtCore import QEventLoop, QTimer
from PyQt5.QtWidgets import QApplication
from datetime import *
class Main(QAxWidget):
def __init__(self):
super().__init__()
self.eventloop = None
self.start_time_marker = datetime.now()
self.eventloop_start_time_marker = None
self.check = 0
self.check_list = [10]
# 타이머설정
self.timer0 = QTimer(self)
self.timer0.start(1000)
self.timer0.timeout.connect(self.run0)
self.timer1 = QTimer(self)
self.timer1.start(1000)
self.timer1.timeout.connect(self.run1)
self.timer2 = QTimer(self)
self.timer2.start(1000)
self.timer2.timeout.connect(self.run2)
self.create_event_loop()
self.run_other()
def run0(self):
self.check = self.check + 1
print(f'타이머0: {datetime.now()}|{self.check}|{self.eventloop.isRunning()}') # 이벤트루프의 상태를 반환
if self.check in self.check_list:
print(f'event loop exit')
self.eventloop.exit()
def create_event_loop(self):
self.eventloop_start_time_marker = datetime.now()
self.eventloop = QEventLoop()
print(f'이벤트루프생성:{self.eventloop_start_time_marker}')
self.eventloop.exec_()
print(f'이벤트루프종료')
def run1(self):
print(f'타이머1:{datetime.now()}')
def run2(self):
if not self.eventloop.isRunning():
print(f'타이머2:{datetime.now()}')
def run_other(self):
print(f'Run_other')
if __name__ == "__main__":
app = QApplication(sys.argv)
main = Main()
app.exec_()
|
cs |
- 실행내역
- 이벤트루프가 실행되고 종료되는 시점까지 timer0, timer1, timer2가 실행되나 timer2는 eventloop.isRunning가 True(이벤트루프 실행중)인 경우 시간을 표시하지 않고 기다린다.
- create_event_loop함수 뒤에 실행된 run_other는 이벤트루프가 종료되고 난 후에 실행된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
이벤트루프생성:2021-07-14 19:37:13.175599
타이머1:2021-07-14 19:37:14.184710
타이머0: 2021-07-14 19:37:14.184710|1|True
타이머1:2021-07-14 19:37:15.189881
타이머0: 2021-07-14 19:37:15.189881|2|True
타이머1:2021-07-14 19:37:16.179242
타이머0: 2021-07-14 19:37:16.179242|3|True
타이머1:2021-07-14 19:37:17.201177
타이머0: 2021-07-14 19:37:17.201177|4|True
타이머1:2021-07-14 19:37:18.196125
타이머0: 2021-07-14 19:37:18.196125|5|True
타이머1:2021-07-14 19:37:19.200046
타이머0: 2021-07-14 19:37:19.200046|6|True
타이머1:2021-07-14 19:37:20.194486
타이머0: 2021-07-14 19:37:20.194486|7|True
타이머1:2021-07-14 19:37:21.204355
타이머0: 2021-07-14 19:37:21.204355|8|True
타이머1:2021-07-14 19:37:22.200170
타이머0: 2021-07-14 19:37:22.200170|9|True
타이머1:2021-07-14 19:37:23.197142
타이머0: 2021-07-14 19:37:23.197142|10|True
event loop exit
이벤트루프종료
Run_other
타이머2:2021-07-14 19:37:24.199179
타이머1:2021-07-14 19:37:24.199179
타이머0: 2021-07-14 19:37:24.199179|11|False
타이머2:2021-07-14 19:37:25.194430
타이머1:2021-07-14 19:37:25.194430
타이머0: 2021-07-14 19:37:25.194430|12|False
|
cs |
'Python, API' 카테고리의 다른 글
[XINGAPI] 해외선물 실시간 주문접수/응답/체결 정보 가져오기 - TC1/TC2/TC3 (0) | 2022.06.30 |
---|---|
[XINGAPI] 해외선물 분봉데이터 조회 - o3123 (0) | 2022.06.29 |
[XINGAPI] 해외선물 실시간체결정보 가져오기 - OVC (2) | 2022.06.29 |
텔레그램의 I/O Bound 해결 (0) | 2021.09.13 |
CMD 실행창 이름 변경하기 (0) | 2021.09.03 |