python多线程 不在main_为什么我的python多线程不能交替运行啊

最近在学数据结构,在队列那一节看到一个模拟银行工作的程序,但不够详细。

我觉得蛮有意思就想用python编个程序模拟一下。

书中的思路主要是计算每个顾客在银行的逗留时间,但我写着写着觉得光是这样没意思,就把重点放到了多线程上。

下面是代码

import threading

from time import ctime, sleep

import random

class Bank:

def __init__(self, name="", time=70):

self.name = name

self.time = time

def opening(self):

self.counters = []

for i in range(random.randrange(2,6)):

self.counters.append(Counter(self.time))

print "Wlecome to Bank %s, we have %d counters." % (self.name, len(self.counters))

while self.time:

p = random.randrange(0,2)

print p

if p:

des = self.min_counter_index()

print ctime()

print "We have a new client, and he will go to counter %d" % des

client = Client(self.counters[des])

sleep(10)

self.time -= 10

print ctime()

def min_counter_index(self):

lengths = []

for c in self.counters:

lengths.append(c.rear-c.front)

return lengths.index(min(lengths))

class Counter:

def __init__(self, time):

self.queue = [None]*10

self.front = self.rear = 0

self.length = len(self.queue)

self.time = time

def check(self):

while self.time:

client = self.queue[self.front]

if client:

sleep(client.stay_time)

self.client_out()

print ctime()

print "A client leaved."

self.time -= client.stay_time

else:

sleep(5)

self.time -= 5

def client_in(self, client):

self.queue[self.rear] = client

self.rear += 1

def client_out(self):

self.queue.pop(self.front)

self.front += 1

class Client:

def __init__(self, counter):

self.stay_time = random.randrange(20, 60, 5)

counter.client_in(self)

def main():

bname = raw_input("Input your bank name:")

bank = Bank(bname)

bank_thread = threading.Thread(target=bank.opening(), args=())

threads = [bank_thread,]

for i in range(len(bank.counters)):

t = threading.Thread(target=bank.counters[i].check(), args=())

threads.append(t)

for i in range(len(bank.counters)+1):

threads[i].start()

for i in range(len(bank.counters)+1):

threads[i].join()

print "Time to close bank. See you next time."

if __name__ == "__main__":

main()

可是写好后运行了10多次,一直都是Bank.opening()先运行,运行结束后Counter.check()才开始运行,而且只有第一个counter在不停地sleep(5),估计也是要这个counter结束了才轮到下一个counter。

我按书上编的多线程程序运行了几遍都没问题,就是上面的程序一直不行。

我的python版本是Python 2.7.3, win7系统。

请大神们帮帮忙,指点一下我这个菜鸟吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值