evanlong / evan-public-development

my public development respository

694125fa » longx223 2009-04-06 fokker problem 1 #Evan Long
2 #Copyright 2009
3
183bc891 » longx223 2009-04-06 fokker problem 4 from __future__ import with_statement
5 import threading
6 import time
7
8 prop = {
9 'rpm':8
10 }
11
12 gun = {
13 'rounds':20,
14 'rate':1,
15 'tracer_rate':3
16 }
17
18 rounds_lock = threading.Lock()
19 gun_can_fire = threading.Event()
20
21 def runprop():
22 while True:
23 with rounds_lock:
24 if gun['rounds'] <= 0:
25 break
26
27 gun_can_fire.clear()
28
29 print 'Prop in gun zone'
30 time.sleep(prop['rpm']/4); #time in zone
31 print 'prop out of gun zone'
32
33 gun_can_fire.set()
34
35 time.sleep(prop['rpm']/2); #time to spin back to zone
36
37 print 'prop done'
38
39 def rungun():
40 while True:
41 gun_can_fire.wait()
42 with rounds_lock:
43 gun['rounds'] -= 1
44 if gun['rounds'] % gun['tracer_rate'] == 0:
45 print 'tracer fired'
46 if gun['rounds'] <= 0:
47 break
48 print 'rounds %d' % gun['rounds']
49 time.sleep(gun['rate'])
50 print 'gun done'
51
52 if __name__ == '__main__':
53 prop_thread = threading.Thread(target=runprop)
54 gun_thread = threading.Thread(target=rungun)
55
56 gun_can_fire.clear()
57
58 prop_thread.start()
59 gun_thread.start()
60
61 prop_thread.join()
62 gun_thread.join()
63