Look at the documentation of the GPIO library you are using. Is there any way to get interrupts, or program the inputs to be latches or counters?
If not, you'll have to poll. It's not clear that you need threads for that though. How long does it take to poll a GPIO input? And do you need your python program to do something else during that time?
I found some sample code here which I thought I may be able to adapt...
exit_barrier = threading.Barrier(2)
pifacedigital = pifacedigitalio.PiFaceDigital()
listener = pifacedigitalio.InputEventListener(chip=pifacedigital)
exit_barrier.wait() # program will wait here until exit_barrier releases
Not sure I understand any of it, but thought I could set up a wait on every switch and carry on normal processing until there was an interrupt...
I may be getting out of my depth here with terminology. Must study a bit more about wait states and interupts...