In Python, the threading module defines and calls the thread method, pythonthreading
Define thread
The simplest method is to use target to specify the target function to be executed by the thread, and then start with start.
Syntax:
class threading.Thread(group=None, target=None, name=None, args=(), kwargs={})
The group value is always None, which will be used in the future. Target is the name of the function to be executed. Name indicates the Thread name. The default value is Thread-N. Generally, the default value is used. However, we recommend that you name the thread function of the server program.
#!/usr/bin/env python3# coding=utf-8import threadingdef function(i): print ("function called by thread {0}".format(i))threads = []for i in range(5): t = threading.Thread(target=function , args=(i,)) threads.append(t) t.start() t.join()
Execution result:
$ ./threading_define.py
function called by thread 0function called by thread 1function called by thread 2function called by thread 3function called by thread 4
Determine the current thread
#!/usr/bin/env python3# coding=utf-8import threadingimport timedef first_function(): print (threading.currentThread().getName()+ str(' is Starting \n')) time.sleep(3) print (threading.currentThread().getName()+ str( ' is Exiting \n')) def second_function(): print (threading.currentThread().getName()+ str(' is Starting \n')) time.sleep(2) print (threading.currentThread().getName()+ str( ' is Exiting \n')) def third_function(): print (threading.currentThread().getName()+\ str(' is Starting \n')) time.sleep(1) print (threading.currentThread().getName()+ str( ' is Exiting \n')) if __name__ == "__main__": t1 = threading.Thread(name='first_function', target=first_function) t2 = threading.Thread(name='second_function', target=second_function) t3 = threading.Thread(name='third_function',target=third_function) t1.start() t2.start() t3.start()
Execution result:
$ ./threading_name.py
first_function is Starting second_function is Starting third_function is Starting third_function is Exiting second_function is Exiting first_function is Exiting
Used with the logging module:
#!/usr/bin/env python3# coding=utf-8import loggingimport threadingimport timelogging.basicConfig( level=logging.DEBUG, format='[%(levelname)s] (%(threadName)-10s) %(message)s', ) def worker(): logging.debug('Starting') time.sleep(2) logging.debug('Exiting') def my_service(): logging.debug('Starting') time.sleep(3) logging.debug('Exiting') t = threading.Thread(name='my_service', target=my_service)w = threading.Thread(name='worker', target=worker)w2 = threading.Thread(target=worker) # use default namew.start()w2.start()t.start()
Execution result:
$ ./threading_names_log.py[DEBUG] (worker ) Starting
[DEBUG] (Thread-1 ) Starting[DEBUG] (my_service) Starting[DEBUG] (worker ) Exiting[DEBUG] (Thread-1 ) Exiting[DEBUG] (my_service) Exiting
Use thread in subclass
Previously, our threads were created in the form of structured programming. You can also create a Thread by integrating the threading. Thread class. The Thread class first completes some basic initialization and then calls its run (). The run () method calls the target function passed to the constructor.
#!/usr/bin/env python3# coding=utf-8import loggingimport threadingimport timeexitFlag = 0class myThread (threading.Thread): def __init__(self, threadID, name, counter): threading.Thread.__init__(self) self.threadID = threadID self.name = name self.counter = counter def run(self): print ("Starting " + self.name) print_time(self.name, self.counter, 5) print ("Exiting " + self.name) def print_time(threadName, delay, counter): while counter: if exitFlag: thread.exit() time.sleep(delay) print ("%s: %s" %(threadName, time.ctime(time.time()))) counter -= 1 # Create new threadsthread1 = myThread(1, "Thread-1", 1)thread2 = myThread(2, "Thread-2", 2)# Start new Threadsthread1.start()thread2.start()print ("Exiting Main Thread")
Execution result:
$ ./threading_subclass.py
Starting Thread-1Starting Thread-2Exiting Main ThreadThread-1: Tue Sep 15 11:03:21 2015Thread-2: Tue Sep 15 11:03:22 2015Thread-1: Tue Sep 15 11:03:22 2015Thread-1: Tue Sep 15 11:03:23 2015Thread-2: Tue Sep 15 11:03:24 2015Thread-1: Tue Sep 15 11:03:24 2015Thread-1: Tue Sep 15 11:03:25 2015Exiting Thread-1Thread-2: Tue Sep 15 11:03:26 2015Thread-2: Tue Sep 15 11:03:28 2015Thread-2: Tue Sep 15 11:03:30 2015Exiting Thread-2