feat: add threading
This commit is contained in:
parent
1b048b229d
commit
201ede414a
35
src/main.py
35
src/main.py
|
@ -47,42 +47,15 @@ import tempfile
|
|||
import re
|
||||
import requests
|
||||
|
||||
from .threading import KillableThread
|
||||
|
||||
from enum import auto, IntEnum
|
||||
|
||||
class Step(IntEnum):
|
||||
CONVERT_HTML = auto()
|
||||
LOAD_WEBVIEW = auto()
|
||||
RENDER = auto()
|
||||
|
||||
class KillableThread(threading.Thread):
|
||||
def __init__(self, *args, **keywords):
|
||||
threading.Thread.__init__(self, *args, **keywords)
|
||||
self.killed = False
|
||||
|
||||
def start(self):
|
||||
self.__run_backup = self.run
|
||||
self.run = self.__run
|
||||
threading.Thread.start(self)
|
||||
|
||||
def __run(self):
|
||||
sys.settrace(self.globaltrace)
|
||||
self.__run_backup()
|
||||
self.run = self.__run_backup
|
||||
|
||||
def globaltrace(self, frame, event, arg):
|
||||
if event == 'call':
|
||||
return self.localtrace
|
||||
else:
|
||||
return None
|
||||
|
||||
def localtrace(self, frame, event, arg):
|
||||
if self.killed:
|
||||
if event == 'line':
|
||||
raise SystemExit()
|
||||
return self.localtrace
|
||||
|
||||
def kill(self):
|
||||
self.killed = True
|
||||
|
||||
|
||||
ANNOUCEMENT_URL = "https://bavarder.codeberg.page/annoucements.json"
|
||||
|
||||
|
||||
|
|
|
@ -24,6 +24,7 @@ configure_file(
|
|||
bavarder_sources = [
|
||||
'__init__.py',
|
||||
'main.py',
|
||||
'threading.py',
|
||||
]
|
||||
|
||||
PY_INSTALLDIR.install_sources(bavarder_sources, subdir: moduledir)
|
||||
|
|
31
src/threading.py
Normal file
31
src/threading.py
Normal file
|
@ -0,0 +1,31 @@
|
|||
import threading
|
||||
|
||||
class KillableThread(threading.Thread):
|
||||
def __init__(self, *args, **keywords):
|
||||
threading.Thread.__init__(self, *args, **keywords)
|
||||
self.killed = False
|
||||
|
||||
def start(self):
|
||||
self.__run_backup = self.run
|
||||
self.run = self.__run
|
||||
threading.Thread.start(self)
|
||||
|
||||
def __run(self):
|
||||
sys.settrace(self.globaltrace)
|
||||
self.__run_backup()
|
||||
self.run = self.__run_backup
|
||||
|
||||
def globaltrace(self, frame, event, arg):
|
||||
if event == 'call':
|
||||
return self.localtrace
|
||||
else:
|
||||
return None
|
||||
|
||||
def localtrace(self, frame, event, arg):
|
||||
if self.killed:
|
||||
if event == 'line':
|
||||
raise SystemExit()
|
||||
return self.localtrace
|
||||
|
||||
def kill(self):
|
||||
self.killed = True
|
Loading…
Reference in New Issue
Block a user