Threading in Python

import logging
import threading
import time

def thread_function(name):
    logging.info("Thread %s: starting", name)
    time.sleep(2)
    logging.info("Thread %s: finishing", name)

if __name__ == "__main__":
    format = "%(asctime)s: %(message)s"
    logging.basicConfig(format=format, level=logging.INFO,
                        datefmt="%H:%M:%S")

    logging.info("Main    : before creating thread")
    x = threading.Thread(target=thread_function, args=(1,))
    logging.info("Main    : before running thread")
    x.start()
    logging.info("Main    : wait for the thread to finish")
    # x.join()
    logging.info("Main    : all done")

Daemon Threads

x = threading.Thread(target=thread_function, args=(1,), daemon=True)

Working With Many Threads

import logging
import threading
import time

def thread_function(name):
    logging.info("Thread %s: starting", name)
    time.sleep(2)
    logging.info("Thread %s: finishing", name)

if __name__ == "__main__":
    format = "%(asctime)s: %(message)s"
    logging.basicConfig(format=format, level=logging.INFO,
                        datefmt="%H:%M:%S")

    threads = list()
    for index in range(3):
        logging.info("Main    : create and start thread %d.", index)
        x = threading.Thread(target=thread_function, args=(index,))
        threads.append(x)
        x.start()

    for index, thread in enumerate(threads):
        logging.info("Main    : before joining thread %d.", index)
        thread.join()
        logging.info("Main    : thread %d done", index)

References
https://realpython.com/intro-to-python-threading/

Draw a rectangle around a region of interest in OpenCV Python

# Python program to explain cv2.rectangle() method 

# importing cv2 
import cv2 

# path 
path = r'C:\Users\Rajnish\Desktop\geeksforgeeks\geeks.png'

# Reading an image in default mode 
image = cv2.imread(path) 

# Window name in which image is displayed 
window_name = 'Image'

# Start coordinate, here (5, 5) 
# represents the top left corner of rectangle 
start_point = (5, 5) 

# Ending coordinate, here (220, 220) 
# represents the bottom right corner of rectangle 
end_point = (220, 220) 

# Blue color in BGR 
color = (255, 0, 0) 

# Line thickness of 2 px 
thickness = 2

# Using cv2.rectangle() method 
# Draw a rectangle with blue line borders of thickness of 2 px 
image = cv2.rectangle(image, start_point, end_point, color, thickness) 

# Displaying the image 
cv2.imshow(window_name, image) 
k = cv2.waitKey(0) # 0==wait forever

References
https://www.geeksforgeeks.org/python-opencv-cv2-rectangle-method/
https://stackoverflow.com/questions/23720875/how-to-draw-a-rectangle-around-a-region-of-interest-in-python

Execute all functions in a file without explicitly calling them in Python

def some_magic():
    import a
    for i in dir(a):
        item = getattr(a,i)
        if callable(item):
            item()

if __name__ == '__main__':
    some_magic()
#!/usr/local/bin/python3
import inspect
import sys


def f1():
    print("f1")


def f2():
    print("f2")


def some_magic(mod):
    all_functions = inspect.getmembers(mod, inspect.isfunction)
    for key, value in all_functions:
        if str(inspect.signature(value)) == "()":
            value()

if __name__ == '__main__':
    some_magic(sys.modules[__name__])
members = inspect.getmembers(self)

for key, value in members:

    if key.startswith("run_"):
        if callable(value):
            if value():
                break

References
https://stackoverflow.com/questions/28643534/is-there-a-way-in-python-to-execute-all-functions-in-a-file-without-explicitly-c

Convert Image to RGB and Grayscale using PIL

im = Image.open("audacious.png")
rgb_im = im.convert('RGB')
rgb_im.save('audacious.jpg')
from PIL import Image
img = Image.open('image.png').convert('LA')
img.save('greyscale.png')

LA mode has luminosity (brightness) and alpha. If you use LA mode, then greyscale.png will be an RGBA image with the alpha channel of image.png preserved. If you use L mode, then greyscale.png will be an RGB image (with no alpha).

References
https://stackoverflow.com/questions/48248405/cannot-write-mode-rgba-as-jpeg
https://stackoverflow.com/questions/12201577/how-can-i-convert-an-rgb-image-into-grayscale-in-python

Iterate over Excel columns using openpyxl

from openpyxl import Workbook, worksheet, load_workbook

wb: Workbook = load_workbook(filename="data.xlsx")
ws: worksheet = wb.active

end_column = ws.max_column
start_column = 1
column_index = start_column

while column_index <= end_column:
    # here we just want first row
    print(ws.cell(1, column_index).value)
    column_index += 1

 

Iterate over Excel rows using openpyxl

from openpyxl import Workbook, worksheet, load_workbook

wb: Workbook = load_workbook(filename="data.xlsx")
ws: worksheet = wb.active

end_row = ws.max_row
# start after header
start_row = 2
row_index = start_row

while row_index <= end_row:
    print(ws["A" + str(row_index)].value)
    print(ws["B" + str(row_index)].value)
    print(ws["C" + str(row_index)].value)
    print(ws["D" + str(row_index)].value)
    print(ws["E" + str(row_index)].value)
    row_index += 1