Welcome, guest | Sign In | My Account | Store | Cart
'''
File: callback_demo2.py
To demonstrate implementation and use of callbacks in Python,
using classes with methods as the callbacks.
Author: Vasudev Ram
Copyright 2017 Vasudev Ram
Web site: https://vasudevram.github.io
Blog: https://jugad2.blogspot.com
Product store: https://gumroad.com/vasudevram
'''


from __future__ import print_function
import sys
from time import sleep

class FileReporter(object):

   
def __init__(self, filename):
       
self._filename = filename
       
try:
           
self._fil = open(self._filename, "w")
       
except IOError as ioe:
            sys
.stderr.write("While opening {}, caught IOError: {}\n".format(
               
self._filename, repr(ioe)))
            sys
.exit(1)

   
def report(self, message):
       
self._fil.write(message)

class ScreenReporter(object):

   
def __init__(self, dest):
       
self._dest = dest

   
def report(self, message):
       
self._dest.write(message)

def square(i):
   
return i * i

def cube(i):
   
return i * i * i

def processor(process, times, report_interval, reporter):
    result
= 0
   
for i in range(1, times + 1):
        result
+= process(i)
        sleep
(0.1)
       
if i % report_interval == 0:
           
# This is the call to the callback method
           
# that was passed to this function.
            reporter
.report("Items processed: {}. Running result: {}.\n".format(i, result))

file_reporter
= FileReporter("processor_report.txt")
processor
(square, 20, 5, file_reporter)

stdout_reporter
= ScreenReporter(sys.stdout)
processor
(square, 20, 5, stdout_reporter)

stderr_reporter
= ScreenReporter(sys.stderr)
processor
(square, 20, 5, stderr_reporter)

History