[Python] Multithreading module thread and threading

Source: Internet
Author: User
Tags exit in mutex thread class

Python provides support for multithreading through two standard libraries (thread, threading)

Thread module

Import TimeImportThreaddefRunner (ARG): forIinchRange (6):          PrintSTR (i) +':'+Arg time.sleep (1)      #End Current ThreadThread.exit_thread ()#equivalent to Thread.exit ()         #start a thread, the first argument is the function name,#The second parameter is a tuple type, which is a parameter passed to the functionThread.start_new_thread (Runner, ('Hello World',))#equivalent to Thread.start_new (runner, (' Hello World '))  #creates a lock, which is used for thread synchronization, and typically controls access to shared resourcesLock = Thread.allocate_lock ()#equivalent to Thread.allocate ()num =0#get lock, return true successfully, fail return falseiflock.acquire (): Num+ = 1#Release Locklock.release ()#threads that are provided by the thread module will end at the end of the main thread and therefore end the main thread delayTime.sleep (10)  Print 'Num:'+STR (num)

threading.ThreadCommon methods of Class

1. Called in its own thread class __ init__ , the threading.Thread.__init__(self,name=threadname) name of the threadname thread.
2. run() it is often necessary to rewrite and write code to implement the required functionality.
3. getName() , get the thread object name.
4. setName() set the thread object name.
5. start() , start the thread.
6. join([timeout]) wait for another thread to finish before running.
7. setDaemon(bool) set whether the child thread ends with the main thread and must be start() called before. The default is False.
8. isDaemon() , determine whether the thread ends with the main threads.
9. isAlive() Check that the thread is running.

To create a thread object, simply inherit the class and threading.Thread then invoke the __ init__ method inside threading.Thread.__init__() . Override the Run () method and put the functionality you want to implement in this method.

classRunner (threading. Thread):def __init__(self, name): Threading. Thread.__init__(self) self.name=name Self.thread_stop=FalsedefRun (self): while  notSelf.thread_stop:PrintSTR (self.name) +':'+'Hello World'Time.sleep (1)      defStop (self): Self.thread_stop=TruedefTest (): t= Runner ('Thread') T.start () Time.sleep (10) t.stop ()if __name__=='__main__': Test ()

Thread Synchronization (Lock)

The simplest synchronization mechanism is the lock. The lock object is created by the threading.RLock class. A thread can use the lock method to obtain a lock so that the acquire() lock enters the locked state. Only one thread can get a lock at a time. If another thread attempts to acquire the lock, it will be turned into a state until the locked thread invokes the lock to blocked release the lock release() , and the lock enters the unlocked state. blockedthe thread of the State receives a notification and has the right to obtain the lock.

If more than one thread is in blocked the state, all threads are released first blocked , and then the system chooses one thread to get the lock, and the other threads continue blocked . Python threading module is based on a built thread module -in one module , in thread module which Python provides a user-level thread synchronization tool for the lock object.

In the threading module middle, Python also provides a Lock variant of the object: the RLock object. RLockAn object is maintained inside an object Lock , which is a Reentrant object. For a lock object, if a thread is operating two times in a row acquire , the acquire release acquire thread will be suspended the second time because there is no after the first time. This causes the Lock object to never be release , causing the thread to deadlock.

RLockObject allows a thread to manipulate it more than once acquire because the counter number of threads is maintained internally through a variable acquire . And each operation acquire must have an release action corresponding to it, after all the release operations are completed, the other thread can request the RLock object.

We refer to the code that modifies the shared data as a critical section. All critical sections must be enclosed in and between the same lock object acquire release .

Import TimeImportThreading Num=0 Lock=Threading. Rlock ()classRunner (threading. Thread):def __init__(self, name): Threading. Thread.__init__(self) self.name=namedefRun (self):GlobalNum whileTrue:ifNum >= 6: Break              ifLock.acquire ():Print "Thread (%s) locked, number:%d"%(Self.name, num) time.sleep (1) lock.release ()Print "Thread (%s) released, Number:%d"%(Self.name, num) time.sleep (1) Num+ = 1defTest (): T1= Runner ('Thread1') T2= Runner ('thread2') T1.start () T2.start ()if __name__=='__main__': Test ()

Python Thread implements Multithreading

#-*-encoding:gb2312-*-Importstring, threading, timedefThread_main (a):Globalcount, Mutex#get the thread nameThreadName =Threading.currentthread (). GetName () forXinchxrange (0, Int (a)):#Get lockMutex.acquire () Count= Count + 1#Release Lockmutex.release ()PrintThreadName, X, Count Time.sleep (1)  defMain (num):Globalcount, Mutex threads=[] Count= 1#Create a lockMutex =Threading. Lock ()#Create a Thread object first   forXinchxrange (0, num): Threads.append (Threading. Thread (Target=thread_main, args= (10,))) #Start All Threads   forTinchThreads:t.start ()#waiting for all child threads to exit in the main thread   forTinchThreads:t.join ()if __name__=='__main__': Num= 4#Create 4 ThreadsMain (4)

Python Threading Implements Multithreading

#-*-encoding:gb2312-*-ImportThreadingImport TimeclassTest (Threading. Thread):def __init__(self, num): Threading. Thread.__init__(self) self._run_num=NumdefRun (self):Globalcount, Mutex ThreadName=Threading.currentthread (). GetName () forXinchxrange (0, int (self._run_num)): Mutex.acquire () Count= Count + 1mutex.release ()PrintThreadName, X, Count Time.sleep (1)  if __name__=='__main__':  Globalcount, Mutex threads=[] Num= 4Count= 1#Create a lockMutex =Threading. Lock ()#To create a thread object   forXinchxrange (0, num): Threads.append (Test (10))  #Start Thread   forTinchThreads:t.start ()#wait for the child thread to end   forTinchThreads:t.join ()

[Python] Multithreading module thread and threading

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.