在前面一篇博文《Python多线程编程(一):threading 模块 Thread 类的用法详解 》 我有简单介绍怎么利用 threading 模块进行多线程的编码。
但那只是多线程编码最简单的部分,真正难的其实是多个线程之间的通信和数据同步。
大概可以这样讲,多线程最难的是如何正确协调各个线程修改同一份数据。
以卖票的例子作为说明。
买票有多个窗口,假设有 3 个好了,窗口之间共享一个票池,每个窗口都可以买票直到票池里面没有票可以卖。
不难写出下面的代码。
import threading
import random
class WindowThread(threading.Thread):
def __init__(self,name):
threading.Thread.__init__(self,name=name)
self.name = name
self.tickts = 0
def run(self):
global tickt_count
while tickt_count > 0:
print('%s notice:There has %d tickts remain ' %(self.name,tickt_count))
if tickt_count > 2:
number = random.randint(1,2)
else:
number = 1
tickt_count -= number
self.tickts += number
print('%s have buy %d tickt,the remain tickt\'t count is %d .Already buy %d \n'
% (self.name, number, tickt_count, self.tickts))
print('%s notice:There is no tickt can sold! Already sold %d'%(self.name,self