Threads and Tasks
So, now you have been initiated on how to create a TaskThread and rescheduling tasks and signals.
Let’s bring it all together.
import asyncio, logging, traceback
from task_thread import TaskThread, reCreate, reSchedule,\
delete, verbose, signals
Subclass the necessary methods to specify a TaskThread:
class MyThread(TaskThread):
def __init__(self, my_id = 0, parent = None):
super().__init__(parent = parent)
self.my_id = my_id
List your tasks:
def initVars__(self):
self.tasks.hello = None # implementation in "self.helloTask__"
enter__
starts the task for the first time:
@verbose
async def enter__(self):
self.logger.info("enter__")
self.tasks.hello = await reCreate(self.tasks.hello, self.helloTask__)
In exit__
, kill the re-scheduling tasks:
@verbose
async def exit__(self):
self.tasks.hello = await delete(self.tasks.hello)
self.logger.info("exit__ : finished")
For the moment, no signal handling:
@verbose
async def signalHandler__(self, signal):
self.logger.info("signalHandler__ : got signal %s", signal)
Rest of the methods:
def getId(self):
return self.my_id
def getInfo(self):
return "<MyThread "+str(self.my_id)+">"
Finally, define the (only) task that is running in this TaskThread:
async def helloTask__(self):
"""A task that prints hello & re-schedules itself
"""
try:
await asyncio.sleep(1)
self.logger.info("Hello from helloTask__ at %s", self.getId())
self.tasks.hello_task = await reSchedule(self.helloTask__)
return
except asyncio.CancelledError:
self.logger.critical("helloTask__: cancelling")
except Exception as e:
self.logger.info("helloTask__: failed with '%s', traceback will follow", e)
traceback.print_exc()
Finaly, the program runs like this:
loglev = logging.DEBUG
logger = logging.getLogger("MyThread")
logger.setLevel(loglev)
thread = MyThread(my_id = "main_thread", parent = None)
loop = asyncio.get_event_loop()
loop.run_until_complete(thread.run())
What next?
To create a real program that does anything worthwhile, you still need to study and understand the examples.