SlideShare a Scribd company logo
PYTHON MULTITHREADING
CHAPTER – 4
THE BASICS OF SEARCH ENGINE FRIENDLY DESIGN & DEVELOPMENT
Copyright @ 2019 Learntek. All Rights Reserved. 3
Python Threading
In the previous article, you have seen the threading methods. In this article, you
will see daemon threads and locks.
Daemon Thread:
So far, we have created the non-daemon thread. What is the daemon
thread? When the main thread exits, it attempts to terminate all of its daemonic
child threads.
Consider an example of GUI as shown below
Copyright @ 2019 Learntek. All Rights Reserved. 4
Consider, by GUI input some calculation is being performed in the background and the
calculation is taking its time. If you click close button two courses of action can be
performed.
1.After clicking the close button the whole GUI window exists.
2.After clicking the close button the GUI window will wait for the completion of
background calculation.
Copyright @ 2019 Learntek. All Rights Reserved. 5
If the first course of action is performed then Daemon thread are being used in
background calculation. If the second course of action is performed then a Non-
daemon thread is being used in background calculation.
Let us understand with the help of code
import threading
import time
def n():
print ("Non deamon start")
print ("NOn daemoon exit")
Copyright @ 2019 Learntek. All Rights Reserved. 6
def d():
print (" daemon start")
time.sleep(5)
print (" daemon stop")
t = threading.Thread(name = "non-daemon",target=n)
d = threading.Thread(name = "daemon",target=d)
d.setDaemon(True)
d.start()
t.start()
Copyright @ 2019 Learntek. All Rights Reserved. 7
If method isDaemon() returns True then the thread is a daemon thread. The syntax
d.setDaemon(True) or d.daemon = True can be used to make daemon thread.
Let us see the output:
Copyright @ 2019 Learntek. All Rights Reserved. 8
Daemon thread will take 5 seconds to complete its task, but main did not wait for
the daemon thread. That’s why in the output there is no “daemon stop”
statement. Now remove the time. Sleep(5) from function d() and add it in n()
function.
See the code below.
Copyright @ 2019 Learntek. All Rights Reserved. 9
import threading
import time
def n():
print ("Non deamon start")
time.sleep(5)
print ("NOn daemoon exit")
def d():
print (" daemon start")
print (" daemon stop")
t = threading.Thread(name = "non-daemon",target=n)
d = threading.Thread(name = "daemon",target=d)
Copyright @ 2019 Learntek. All Rights Reserved. 10
d.setDaemon(True)
d.start()
t.start()
See the output:
Copyright @ 2019 Learntek. All Rights Reserved. 11
In the above example, all print statements are executed. The main thread had to wait
for the non-daemon process.
Note: If you use join statement for Daemon thread then the main thread has to wait
for the completion of Daemon thread’s task.
Learn Python + Advanced Python with our Experts
Copyright @ 2019 Learntek. All Rights Reserved. 12
Locks
Locks are the most fundamental synchronization mechanism provided by the
threading module. A lock is in one of two states, locked or unlocked. If a thread
attempts to hold a lock that’s already held by some other thread, execution of the
second thread is halted until the lock is released.
lock.acquire ():
Acquire a lock, blocks others until True (Default )
lock.locked():
Returns True if lock is locked, otherwise False.
lock.release():
Unlocks the lock
Copyright @ 2019 Learntek. All Rights Reserved. 13
Let us see one example.
import threading
import time
lock = threading.Lock()
list1 = []
def fun1(a):
lock.acquire()
list1.append(a)
lock.release()
for each in range(10):
Copyright @ 2019 Learntek. All Rights Reserved. 14
thread1 = threading.Thread(target=fun1, args=(each,))
thread1.start()
print ("List1 is : ", list1)
The lock = threading.Lock() is used to create a lock object.
The main problem with the lock is, the lock does not remember which thread
acquired the lock. Now two problem can be aroused.
Copyright @ 2019 Learntek. All Rights Reserved. 15
See the code below.
import threading
import time
lock = threading.Lock()
import datetime
t1 = datetime.datetime.now()
def second(n):
lock.acquire()
print (n)
def third():
Copyright @ 2019 Learntek. All Rights Reserved. 16
time.sleep(5)
lock.release()
print ("Thread3 ")
th1 = threading.Thread(target= second, args=("Thread1",))
th1.start()
th2 = threading.Thread(target= second, args=("Thread2",))
th2.start()
th3 = threading.Thread(target= third)
th3.start()
Copyright @ 2019 Learntek. All Rights Reserved. 17
th1.join()
th2.join()
th3.join()
t2 = datetime.datetime.now()
print ("Total time", t2-t1)
In the above code, a lock is acquired by thread1 and released by thread3. The
thread2 is trying to acquire the lock.
Let us see the output.
Copyright @ 2019 Learntek. All Rights Reserved. 18
From the sequence of execution, it is clear that the lock acquired by the thread1 got
released by the thread3.
Let see second problem.
Copyright @ 2019 Learntek. All Rights Reserved. 19
import threading
lock = threading.Lock()
def first(n):
lock.acquire()
a =12+n
lock.release()
print (a)
def second(n):
lock.acquire()
b = 12+n
Copyright @ 2019 Learntek. All Rights Reserved. 20
lock.release()
print (b)
def all():
lock.acquire()
first(2)
second(3)
lock.release()
th1 = threading.Thread(target= all)
th1.start()
Copyright @ 2019 Learntek. All Rights Reserved. 21
When you run the above code, deadlock would occur. In the function all thread
will acquire a lock, after acquiring the lock the first function will be called. The
thread will see the lock.acquire() statement. As this lock itself acquired by the
same python multithreading. But lock does not remember the thread which
acquired it.
In order to overcome above problem, we use Reentrant lock (RLock).
Just replace the threading.Lock with threading.Rlock
threading.RLock() — A factory function that returns a new reentrant lock
object. A reentrant lock must be released by the thread that acquired it. Once a
thread has acquired a reentrant lock, the same thread may acquire it again
without blocking; the thread must release it once for each time it has acquired it.
Copyright @ 2019 Learntek. All Rights Reserved. 22
Lock vs Rlock
The main difference is that a Lock can only be acquired once. It cannot be acquired
again until it is released. (After it’s been released, it can be re-acquired by any
thread).
An RLock, on the other hand, can be acquired multiple times, by the same thread. It
needs to be released the same number of times in order to be “unlocked”.
Another difference is that an acquired Lock can be released by any thread, while an
acquired RLock can only be released by the thread which acquired it.
Copyright @ 2019 Learntek. All Rights Reserved. 23
GIL
Thread-based parallelism is the standard way of writing parallel programs. However,
the Python interpreter is not fully thread-safe. In order to support multi-threaded
Python programs, a global lock called the Global Interpreter Lock (GIL) is used. This
means that only one thread can execute the Python code at the same time; Python
automatically switches to the next thread after a short period of time or when a
thread does something that may take a while. The GIL is not enough to avoid
problems in your own programs. Although, if multiple threads attempt to access the
same data object, it may end up in an inconsistent state.
Copyright @ 2019 Learntek. All Rights Reserved. 24
Let us see the example.
import datetime
def count(n):
t1 = datetime.datetime.now()
while n > 0:
n = n-1
t2 = datetime.datetime.now()
print (t2-t1)
count(100000000)
Copyright @ 2019 Learntek. All Rights Reserved. 25
In the above code, the count function is being run the main thread. Let see the time
taken by the thread.
Copyright @ 2019 Learntek. All Rights Reserved.
26
I ran the code three times, every time I got a similar result.
Let us create two thread, see the code below.
import datetime
from threading import Thread
def count(n):
while n > 0:
n = n-1
def count1(n):
while n > 0:
n = n-1
Copyright @ 2019 Learntek. All Rights Reserved. 27
t1 = datetime.datetime.now()
thread1 = Thread(target = count, args=(100000000,))
thread2 = Thread(target = count1, args= (100000000,))
thread1.start()
thread2.start()
thread1.join()
thread2.join()
t2 = datetime.datetime.now()
print (t2-t1)
Copyright @ 2019 Learntek. All Rights Reserved. 28
In the above, two threads have been created to be run in parallel.
Let us see the result.
Copyright @ 2019 Learntek. All Rights Reserved. 29
You can the above code took almost 10 seconds which is the double of the
previous program, it means, only the main thread act as multithreading. But above
experiment, we can conclude that Multithreading is defined as the ability of a
processor to execute multiple threads concurrently.
In a simple, single-core CPU, it is achieved using frequent switching between
threads. This is termed as context switching.
In context switching, the state of a thread is saved and state of another thread is
loaded whenever any interrupt (due to I/O or manually set) takes place. Context
switching takes place so frequently that all the threads appear to be running
parallelly(this is termed as multitasking)
Copyright @ 2019 Learntek. All Rights Reserved. 30
Copyright @ 2019 Learntek. All Rights Reserved. 31
For more Online Training Courses, Please
contact
Email : info@learntek.org
USA : +1734 418 2465
India : +91 40 4018 1306
+91 7799713624

More Related Content

What's hot (20)

PPTX
Programming Assignment Help
Programming Homework Help
 
PDF
Java 8 - Stamped Lock
Haim Yadid
 
DOC
computer notes - Inter process communication
ecomputernotes
 
PDF
Metrics ekon 14_2_kleiner
Max Kleiner
 
PPTX
Operating System Assignment Help
Programming Homework Help
 
PDF
PyCon TW 2017 - PyPy's approach to construct domain-specific language runtime...
Tsundere Chen
 
PPT
5 stream ciphers
Harish Sahu
 
PDF
Why rust?
Mats Kindahl
 
DOCX
Parallel Programming With Dot Net
Neeraj Kaushik
 
PPTX
Rass presentation
Shalini Guha
 
PDF
TensorFlow Lite (r1.5) & Android 8.1 Neural Network API
Mr. Vengineer
 
PDF
Java Concurrency by Example
Ganesh Samarthyam
 
PPTX
Async await in C++
cppfrug
 
PDF
PyPy's approach to construct domain-specific language runtime
National Cheng Kung University
 
PDF
The Ring programming language version 1.5.3 book - Part 189 of 194
Mahmoud Samir Fayed
 
PDF
EKON 25 Python4Delphi_mX4
Max Kleiner
 
PDF
Use of an Oscilloscope - maXbox Starter33
Max Kleiner
 
PDF
Introduction to python
mckennadglyn
 
PPTX
Synchronization
David Evans
 
Programming Assignment Help
Programming Homework Help
 
Java 8 - Stamped Lock
Haim Yadid
 
computer notes - Inter process communication
ecomputernotes
 
Metrics ekon 14_2_kleiner
Max Kleiner
 
Operating System Assignment Help
Programming Homework Help
 
PyCon TW 2017 - PyPy's approach to construct domain-specific language runtime...
Tsundere Chen
 
5 stream ciphers
Harish Sahu
 
Why rust?
Mats Kindahl
 
Parallel Programming With Dot Net
Neeraj Kaushik
 
Rass presentation
Shalini Guha
 
TensorFlow Lite (r1.5) & Android 8.1 Neural Network API
Mr. Vengineer
 
Java Concurrency by Example
Ganesh Samarthyam
 
Async await in C++
cppfrug
 
PyPy's approach to construct domain-specific language runtime
National Cheng Kung University
 
The Ring programming language version 1.5.3 book - Part 189 of 194
Mahmoud Samir Fayed
 
EKON 25 Python4Delphi_mX4
Max Kleiner
 
Use of an Oscilloscope - maXbox Starter33
Max Kleiner
 
Introduction to python
mckennadglyn
 
Synchronization
David Evans
 

Similar to Python multithreading (20)

PDF
concurrency
Jonathan Wagoner
 
PPTX
MULTI THREADING.pptx
KeerthanaM738437
 
PPTX
Python UNIT-IV Multi Threading B.Tech CSE
SrinuTelugu
 
PDF
Multithreaded_Programming_in_Python.pdf
giridharsripathi
 
PPTX
Generators & Decorators.pptx
IrfanShaik98
 
PDF
Python programming : Threads
Emertxe Information Technologies Pvt Ltd
 
PDF
25 must know python for Interview by Tutort Academy
yashikanigam1
 
PDF
MultiThreading in Python
SRINIVAS KOLAPARTHI
 
PDF
Intro to Multitasking
Brian Schrader
 
PDF
PyCon Canada 2019 - Introduction to Asynchronous Programming
Juti Noppornpitak
 
PDF
chap7_slidesforparallelcomputingananthgrama
doomzday27
 
KEY
Do more than one thing at the same time, the Python way
Jaime Buelta
 
PDF
Python multithreaded programming
Learnbay Datascience
 
PPTX
Chapter 5 - THREADING & REGULAR exp - MAULIK BORSANIYA
Maulik Borsaniya
 
DOCX
Multi Threading.docx
manohar25689
 
PDF
Concurrency in Python
Mosky Liu
 
PPT
Chap7 slides
BaliThorat1
 
PPTX
Mathemetics module
manikanta361
 
PDF
Multiprocessing.pdf..............,.......
Bhaveshmali28
 
concurrency
Jonathan Wagoner
 
MULTI THREADING.pptx
KeerthanaM738437
 
Python UNIT-IV Multi Threading B.Tech CSE
SrinuTelugu
 
Multithreaded_Programming_in_Python.pdf
giridharsripathi
 
Generators & Decorators.pptx
IrfanShaik98
 
Python programming : Threads
Emertxe Information Technologies Pvt Ltd
 
25 must know python for Interview by Tutort Academy
yashikanigam1
 
MultiThreading in Python
SRINIVAS KOLAPARTHI
 
Intro to Multitasking
Brian Schrader
 
PyCon Canada 2019 - Introduction to Asynchronous Programming
Juti Noppornpitak
 
chap7_slidesforparallelcomputingananthgrama
doomzday27
 
Do more than one thing at the same time, the Python way
Jaime Buelta
 
Python multithreaded programming
Learnbay Datascience
 
Chapter 5 - THREADING & REGULAR exp - MAULIK BORSANIYA
Maulik Borsaniya
 
Multi Threading.docx
manohar25689
 
Concurrency in Python
Mosky Liu
 
Chap7 slides
BaliThorat1
 
Mathemetics module
manikanta361
 
Multiprocessing.pdf..............,.......
Bhaveshmali28
 
Ad

More from Janu Jahnavi (20)

PDF
Analytics using r programming
Janu Jahnavi
 
PDF
Software testing
Janu Jahnavi
 
PPTX
Software testing
Janu Jahnavi
 
PPTX
Spring
Janu Jahnavi
 
PDF
Stack skills
Janu Jahnavi
 
PPTX
Ui devopler
Janu Jahnavi
 
PPTX
Apache flink
Janu Jahnavi
 
PDF
Apache flink
Janu Jahnavi
 
PDF
Angular js
Janu Jahnavi
 
PDF
Mysql python
Janu Jahnavi
 
PPTX
Mysql python
Janu Jahnavi
 
PDF
Ruby with cucmber
Janu Jahnavi
 
PPTX
Apache kafka
Janu Jahnavi
 
PDF
Apache kafka
Janu Jahnavi
 
PPTX
Google cloud platform
Janu Jahnavi
 
PPTX
Google cloud Platform
Janu Jahnavi
 
PDF
Apache spark with java 8
Janu Jahnavi
 
PPTX
Apache spark with java 8
Janu Jahnavi
 
PDF
Categorizing and pos tagging with nltk python
Janu Jahnavi
 
PPTX
Categorizing and pos tagging with nltk python
Janu Jahnavi
 
Analytics using r programming
Janu Jahnavi
 
Software testing
Janu Jahnavi
 
Software testing
Janu Jahnavi
 
Spring
Janu Jahnavi
 
Stack skills
Janu Jahnavi
 
Ui devopler
Janu Jahnavi
 
Apache flink
Janu Jahnavi
 
Apache flink
Janu Jahnavi
 
Angular js
Janu Jahnavi
 
Mysql python
Janu Jahnavi
 
Mysql python
Janu Jahnavi
 
Ruby with cucmber
Janu Jahnavi
 
Apache kafka
Janu Jahnavi
 
Apache kafka
Janu Jahnavi
 
Google cloud platform
Janu Jahnavi
 
Google cloud Platform
Janu Jahnavi
 
Apache spark with java 8
Janu Jahnavi
 
Apache spark with java 8
Janu Jahnavi
 
Categorizing and pos tagging with nltk python
Janu Jahnavi
 
Categorizing and pos tagging with nltk python
Janu Jahnavi
 
Ad

Recently uploaded (20)

PPTX
PPT-Q1-WEEK-3-SCIENCE-ERevised Matatag Grade 3.pptx
reijhongidayawan02
 
PDF
Geographical Diversity of India 100 Mcq.pdf/ 7th class new ncert /Social/Samy...
Sandeep Swamy
 
PPTX
PPT-Q1-WK-3-ENGLISH Revised Matatag Grade 3.pptx
reijhongidayawan02
 
PPTX
Identifying elements in the story. Arrange the events in the story
geraldineamahido2
 
PPTX
How to Set Up Tags in Odoo 18 - Odoo Slides
Celine George
 
PPTX
Stereochemistry-Optical Isomerism in organic compoundsptx
Tarannum Nadaf-Mansuri
 
PDF
Women's Health: Essential Tips for Every Stage.pdf
Iftikhar Ahmed
 
PDF
CONCURSO DE POESIA “POETUFAS – PASSOS SUAVES PELO VERSO.pdf
Colégio Santa Teresinha
 
PPTX
ASRB NET 2023 PREVIOUS YEAR QUESTION PAPER GENETICS AND PLANT BREEDING BY SAT...
Krashi Coaching
 
PPTX
Unit 2 COMMERCIAL BANKING, Corporate banking.pptx
AnubalaSuresh1
 
PPT
Talk on Critical Theory, Part One, Philosophy of Social Sciences
Soraj Hongladarom
 
PPTX
Growth and development and milestones, factors
BHUVANESHWARI BADIGER
 
PPTX
care of patient with elimination needs.pptx
Rekhanjali Gupta
 
PPTX
QUARTER 1 WEEK 2 PLOT, POV AND CONFLICTS
KynaParas
 
PDF
0725.WHITEPAPER-UNIQUEWAYSOFPROTOTYPINGANDUXNOW.pdf
Thomas GIRARD, MA, CDP
 
PPTX
CATEGORIES OF NURSING PERSONNEL: HOSPITAL & COLLEGE
PRADEEP ABOTHU
 
PDF
Generative AI: it's STILL not a robot (CIJ Summer 2025)
Paul Bradshaw
 
PDF
ARAL-Orientation_Morning-Session_Day-11.pdf
JoelVilloso1
 
PPTX
Universal immunization Programme (UIP).pptx
Vishal Chanalia
 
PDF
ARAL_Orientation_Day-2-Sessions_ARAL-Readung ARAL-Mathematics ARAL-Sciencev2.pdf
JoelVilloso1
 
PPT-Q1-WEEK-3-SCIENCE-ERevised Matatag Grade 3.pptx
reijhongidayawan02
 
Geographical Diversity of India 100 Mcq.pdf/ 7th class new ncert /Social/Samy...
Sandeep Swamy
 
PPT-Q1-WK-3-ENGLISH Revised Matatag Grade 3.pptx
reijhongidayawan02
 
Identifying elements in the story. Arrange the events in the story
geraldineamahido2
 
How to Set Up Tags in Odoo 18 - Odoo Slides
Celine George
 
Stereochemistry-Optical Isomerism in organic compoundsptx
Tarannum Nadaf-Mansuri
 
Women's Health: Essential Tips for Every Stage.pdf
Iftikhar Ahmed
 
CONCURSO DE POESIA “POETUFAS – PASSOS SUAVES PELO VERSO.pdf
Colégio Santa Teresinha
 
ASRB NET 2023 PREVIOUS YEAR QUESTION PAPER GENETICS AND PLANT BREEDING BY SAT...
Krashi Coaching
 
Unit 2 COMMERCIAL BANKING, Corporate banking.pptx
AnubalaSuresh1
 
Talk on Critical Theory, Part One, Philosophy of Social Sciences
Soraj Hongladarom
 
Growth and development and milestones, factors
BHUVANESHWARI BADIGER
 
care of patient with elimination needs.pptx
Rekhanjali Gupta
 
QUARTER 1 WEEK 2 PLOT, POV AND CONFLICTS
KynaParas
 
0725.WHITEPAPER-UNIQUEWAYSOFPROTOTYPINGANDUXNOW.pdf
Thomas GIRARD, MA, CDP
 
CATEGORIES OF NURSING PERSONNEL: HOSPITAL & COLLEGE
PRADEEP ABOTHU
 
Generative AI: it's STILL not a robot (CIJ Summer 2025)
Paul Bradshaw
 
ARAL-Orientation_Morning-Session_Day-11.pdf
JoelVilloso1
 
Universal immunization Programme (UIP).pptx
Vishal Chanalia
 
ARAL_Orientation_Day-2-Sessions_ARAL-Readung ARAL-Mathematics ARAL-Sciencev2.pdf
JoelVilloso1
 

Python multithreading

  • 2. CHAPTER – 4 THE BASICS OF SEARCH ENGINE FRIENDLY DESIGN & DEVELOPMENT
  • 3. Copyright @ 2019 Learntek. All Rights Reserved. 3 Python Threading In the previous article, you have seen the threading methods. In this article, you will see daemon threads and locks. Daemon Thread: So far, we have created the non-daemon thread. What is the daemon thread? When the main thread exits, it attempts to terminate all of its daemonic child threads. Consider an example of GUI as shown below
  • 4. Copyright @ 2019 Learntek. All Rights Reserved. 4 Consider, by GUI input some calculation is being performed in the background and the calculation is taking its time. If you click close button two courses of action can be performed. 1.After clicking the close button the whole GUI window exists. 2.After clicking the close button the GUI window will wait for the completion of background calculation.
  • 5. Copyright @ 2019 Learntek. All Rights Reserved. 5 If the first course of action is performed then Daemon thread are being used in background calculation. If the second course of action is performed then a Non- daemon thread is being used in background calculation. Let us understand with the help of code import threading import time def n(): print ("Non deamon start") print ("NOn daemoon exit")
  • 6. Copyright @ 2019 Learntek. All Rights Reserved. 6 def d(): print (" daemon start") time.sleep(5) print (" daemon stop") t = threading.Thread(name = "non-daemon",target=n) d = threading.Thread(name = "daemon",target=d) d.setDaemon(True) d.start() t.start()
  • 7. Copyright @ 2019 Learntek. All Rights Reserved. 7 If method isDaemon() returns True then the thread is a daemon thread. The syntax d.setDaemon(True) or d.daemon = True can be used to make daemon thread. Let us see the output:
  • 8. Copyright @ 2019 Learntek. All Rights Reserved. 8 Daemon thread will take 5 seconds to complete its task, but main did not wait for the daemon thread. That’s why in the output there is no “daemon stop” statement. Now remove the time. Sleep(5) from function d() and add it in n() function. See the code below.
  • 9. Copyright @ 2019 Learntek. All Rights Reserved. 9 import threading import time def n(): print ("Non deamon start") time.sleep(5) print ("NOn daemoon exit") def d(): print (" daemon start") print (" daemon stop") t = threading.Thread(name = "non-daemon",target=n) d = threading.Thread(name = "daemon",target=d)
  • 10. Copyright @ 2019 Learntek. All Rights Reserved. 10 d.setDaemon(True) d.start() t.start() See the output:
  • 11. Copyright @ 2019 Learntek. All Rights Reserved. 11 In the above example, all print statements are executed. The main thread had to wait for the non-daemon process. Note: If you use join statement for Daemon thread then the main thread has to wait for the completion of Daemon thread’s task. Learn Python + Advanced Python with our Experts
  • 12. Copyright @ 2019 Learntek. All Rights Reserved. 12 Locks Locks are the most fundamental synchronization mechanism provided by the threading module. A lock is in one of two states, locked or unlocked. If a thread attempts to hold a lock that’s already held by some other thread, execution of the second thread is halted until the lock is released. lock.acquire (): Acquire a lock, blocks others until True (Default ) lock.locked(): Returns True if lock is locked, otherwise False. lock.release(): Unlocks the lock
  • 13. Copyright @ 2019 Learntek. All Rights Reserved. 13 Let us see one example. import threading import time lock = threading.Lock() list1 = [] def fun1(a): lock.acquire() list1.append(a) lock.release() for each in range(10):
  • 14. Copyright @ 2019 Learntek. All Rights Reserved. 14 thread1 = threading.Thread(target=fun1, args=(each,)) thread1.start() print ("List1 is : ", list1) The lock = threading.Lock() is used to create a lock object. The main problem with the lock is, the lock does not remember which thread acquired the lock. Now two problem can be aroused.
  • 15. Copyright @ 2019 Learntek. All Rights Reserved. 15 See the code below. import threading import time lock = threading.Lock() import datetime t1 = datetime.datetime.now() def second(n): lock.acquire() print (n) def third():
  • 16. Copyright @ 2019 Learntek. All Rights Reserved. 16 time.sleep(5) lock.release() print ("Thread3 ") th1 = threading.Thread(target= second, args=("Thread1",)) th1.start() th2 = threading.Thread(target= second, args=("Thread2",)) th2.start() th3 = threading.Thread(target= third) th3.start()
  • 17. Copyright @ 2019 Learntek. All Rights Reserved. 17 th1.join() th2.join() th3.join() t2 = datetime.datetime.now() print ("Total time", t2-t1) In the above code, a lock is acquired by thread1 and released by thread3. The thread2 is trying to acquire the lock. Let us see the output.
  • 18. Copyright @ 2019 Learntek. All Rights Reserved. 18 From the sequence of execution, it is clear that the lock acquired by the thread1 got released by the thread3. Let see second problem.
  • 19. Copyright @ 2019 Learntek. All Rights Reserved. 19 import threading lock = threading.Lock() def first(n): lock.acquire() a =12+n lock.release() print (a) def second(n): lock.acquire() b = 12+n
  • 20. Copyright @ 2019 Learntek. All Rights Reserved. 20 lock.release() print (b) def all(): lock.acquire() first(2) second(3) lock.release() th1 = threading.Thread(target= all) th1.start()
  • 21. Copyright @ 2019 Learntek. All Rights Reserved. 21 When you run the above code, deadlock would occur. In the function all thread will acquire a lock, after acquiring the lock the first function will be called. The thread will see the lock.acquire() statement. As this lock itself acquired by the same python multithreading. But lock does not remember the thread which acquired it. In order to overcome above problem, we use Reentrant lock (RLock). Just replace the threading.Lock with threading.Rlock threading.RLock() — A factory function that returns a new reentrant lock object. A reentrant lock must be released by the thread that acquired it. Once a thread has acquired a reentrant lock, the same thread may acquire it again without blocking; the thread must release it once for each time it has acquired it.
  • 22. Copyright @ 2019 Learntek. All Rights Reserved. 22 Lock vs Rlock The main difference is that a Lock can only be acquired once. It cannot be acquired again until it is released. (After it’s been released, it can be re-acquired by any thread). An RLock, on the other hand, can be acquired multiple times, by the same thread. It needs to be released the same number of times in order to be “unlocked”. Another difference is that an acquired Lock can be released by any thread, while an acquired RLock can only be released by the thread which acquired it.
  • 23. Copyright @ 2019 Learntek. All Rights Reserved. 23 GIL Thread-based parallelism is the standard way of writing parallel programs. However, the Python interpreter is not fully thread-safe. In order to support multi-threaded Python programs, a global lock called the Global Interpreter Lock (GIL) is used. This means that only one thread can execute the Python code at the same time; Python automatically switches to the next thread after a short period of time or when a thread does something that may take a while. The GIL is not enough to avoid problems in your own programs. Although, if multiple threads attempt to access the same data object, it may end up in an inconsistent state.
  • 24. Copyright @ 2019 Learntek. All Rights Reserved. 24 Let us see the example. import datetime def count(n): t1 = datetime.datetime.now() while n > 0: n = n-1 t2 = datetime.datetime.now() print (t2-t1) count(100000000)
  • 25. Copyright @ 2019 Learntek. All Rights Reserved. 25 In the above code, the count function is being run the main thread. Let see the time taken by the thread.
  • 26. Copyright @ 2019 Learntek. All Rights Reserved. 26 I ran the code three times, every time I got a similar result. Let us create two thread, see the code below. import datetime from threading import Thread def count(n): while n > 0: n = n-1 def count1(n): while n > 0: n = n-1
  • 27. Copyright @ 2019 Learntek. All Rights Reserved. 27 t1 = datetime.datetime.now() thread1 = Thread(target = count, args=(100000000,)) thread2 = Thread(target = count1, args= (100000000,)) thread1.start() thread2.start() thread1.join() thread2.join() t2 = datetime.datetime.now() print (t2-t1)
  • 28. Copyright @ 2019 Learntek. All Rights Reserved. 28 In the above, two threads have been created to be run in parallel. Let us see the result.
  • 29. Copyright @ 2019 Learntek. All Rights Reserved. 29 You can the above code took almost 10 seconds which is the double of the previous program, it means, only the main thread act as multithreading. But above experiment, we can conclude that Multithreading is defined as the ability of a processor to execute multiple threads concurrently. In a simple, single-core CPU, it is achieved using frequent switching between threads. This is termed as context switching. In context switching, the state of a thread is saved and state of another thread is loaded whenever any interrupt (due to I/O or manually set) takes place. Context switching takes place so frequently that all the threads appear to be running parallelly(this is termed as multitasking)
  • 30. Copyright @ 2019 Learntek. All Rights Reserved. 30
  • 31. Copyright @ 2019 Learntek. All Rights Reserved. 31 For more Online Training Courses, Please contact Email : [email protected] USA : +1734 418 2465 India : +91 40 4018 1306 +91 7799713624