I've started programming in Python a few weeks ago and was trying to use Semaphores to synchronize two simple threads, for learning purposes. Here is what I've got:
import threading
sem = threading.Semaphore()def fun1():while True:sem.acquire()print(1)sem.release()def fun2():while True:sem.acquire()print(2)sem.release()t = threading.Thread(target = fun1)
t.start()
t2 = threading.Thread(target = fun2)
t2.start()
But it keeps printing just 1's. How can I intercale the prints?
It is working fine, its just that its printing too fast for you to see . Try putting a time.sleep()
in both functions (a small amount) to sleep the thread for that much amount of time, to actually be able to see both 1 as well as 2.
Example -
import threading
import time
sem = threading.Semaphore()def fun1():while True:sem.acquire()print(1)sem.release()time.sleep(0.25)def fun2():while True:sem.acquire()print(2)sem.release()time.sleep(0.25)t = threading.Thread(target = fun1)
t.start()
t2 = threading.Thread(target = fun2)
t2.start()