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

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.
主站蜘蛛池模板: 丰镇市| 高雄县| 阿勒泰市| 武乡县| 萨嘎县| 准格尔旗| 从化市| 神池县| 重庆市| 乌兰察布市| 西乌| 苍山县| 南江县| 墨竹工卡县| 门头沟区| 资阳市| 新安县| 怀宁县| 郎溪县| 仙居县| 衡山县| 锡林浩特市| 鄂托克旗| 博乐市| 和田县| 昌都县| 潞西市| 南澳县| 翼城县| 岫岩| 稻城县| 泌阳县| 睢宁县| 河北区| 城口县| 辽源市| 宜宾县| 宿松县| 建始县| 满城县| 红安县|