Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Semaphores on Python

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?

like image 337
Victor Turrisi Avatar asked Jul 20 '15 03:07

Victor Turrisi


1 Answers

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() 
like image 150
Anand S Kumar Avatar answered Oct 12 '22 14:10

Anand S Kumar