官术网_书友最值得收藏!

An example in Python

Let's consider a specific example. In this example, we will be looking at the Chapter03/example4.py file. We will go back to the thread example of counting down from five to one, which we looked at at the beginning of this chapter; take a moment to look back if you do not remember the problem. In this example, we will be tweaking the MyThread class, as follows:

# Chapter03/example4.py

import threading
import time

class MyThread(threading.Thread):
def __init__(self, name, delay):
threading.Thread.__init__(self)
self.name = name
self.delay = delay

def run(self):
print('Starting thread %s.' % self.name)
thread_lock.acquire()
thread_count_down(self.name, self.delay)
thread_lock.release()
print('Finished thread %s.' % self.name)

def thread_count_down(name, delay):
counter = 5

while counter:
time.sleep(delay)
print('Thread %s counting down: %i...' % (name, counter))
counter -= 1

As opposed to the first example of this chapter, in this example, the MyThread class utilizes a lock object (whose variable is named thread_lock) inside of its run() function. Specifically, the lock object is acquired right before the thread_count_down() function is called (that is, when the countdown begins), and the lock object is released right after its ends. Theoretically, this specification will alter the behavior of the threads that we saw in the first example; instead of executing the countdown simultaneously, the program will now execute the threads separately, and the countdowns will take place one after the other.

Finally, we will initialize the thread_lock variable as well as run two separate instances of the MyThread class:

thread_lock = threading.Lock()

thread1 = MyThread('A', 0.5)
thread2 = MyThread('B', 0.5)

thread1.start()
thread2.start()

thread1.join()
thread2.join()


print('Finished.')

The output will be as follows:

> python example4.py
Starting thread A.
Starting thread B.
Thread A counting down: 5...
Thread A counting down: 4...
Thread A counting down: 3...
Thread A counting down: 2...
Thread A counting down: 1...
Finished thread A.
Thread B counting down: 5...
Thread B counting down: 4...
Thread B counting down: 3...
Thread B counting down: 2...
Thread B counting down: 1...
Finished thread B.
Finished.
主站蜘蛛池模板: 武穴市| 自治县| 天镇县| 华坪县| 伊宁县| 呼图壁县| 将乐县| 呼玛县| 综艺| 大兴区| 邛崃市| 南靖县| 新竹市| 诏安县| 汕头市| 调兵山市| 麻栗坡县| 葫芦岛市| 长阳| 开原市| 嘉祥县| 邯郸县| 章丘市| 治县。| 曲麻莱县| 青冈县| 普陀区| 烟台市| 嘉兴市| 邹平县| 崇信县| 富川| 织金县| 山东省| 教育| 西吉县| 泊头市| 河东区| 咸阳市| 黄大仙区| 乐至县|