Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p><strong>Example 2</strong></p> <pre><code>from os.path import basename from Queue import Queue from random import random from sys import argv, exit from threading import Thread from time import sleep # for creating widgets class Widget: pass # for creating stacks class Stack: def __init__(self): self.__stack = list() def __len__(self): return len(self.__stack) def push(self, item): self.__stack.append(item) def pop(self): return self.__stack.pop() # provides an outline for the execution of the program def main(): # check and parse the command line arguments parse_sys_argv() # setup the variables used by the threads run_flag = [True] queue = Queue(argv[1]) send = Stack() recv = Stack() # start the threads producer = Thread(target=produce, args=(run_flag, queue, send)) consumer = Thread(target=consume, args=(run_flag, queue, recv, producer)) producer.start() consumer.start() # let the threads do their work sleep(argv[2]) run_flag[0] = False consumer.join() # verify that the solution was valid calculate_results(send, recv) # parses and checks the command line arguments def parse_sys_argv(): try: # there should be two command line arguments assert len(argv) == 3 # convert &lt;buf_size&gt; and check argv[1] = abs(int(argv[1])) assert argv[1] &gt; 0 # convert &lt;run_time&gt; and check argv[2] = abs(float(argv[2])) assert argv[2] &gt; 0 except: # print out usage information print basename(argv[0]), print '&lt;buf_size&gt; &lt;run_time&gt;' # exits the program exit(1) # called by the producer thread def produce(run_flag, queue, send): while run_flag[0]: # simulate production sleep(random()) # put widget in buffer item = Widget() queue.put(item) send.push(item) # called by the consumer thread def consume(run_flag, queue, recv, producer): # consume items while running while run_flag[0]: do_consume(queue, recv) # empty the queue to allow maximum room while not queue.empty(): do_consume(queue, recv) # wait for the producer to end producer.join() # consume any other items that might have been produced while not queue.empty(): do_consume(queue, recv) # executes one consumption operation def do_consume(queue, recv): # get a widget from the queue recv.push(queue.get()) # simulate consumption sleep(random()) # verifies that send and recv were equal def calculate_results(send, recv): print 'Solution has', try: # make sure that send and recv have the same length assert len(send) == len(recv) # check all of the contents of send and recv while send: # check the identity of the items in send and recv assert send.pop() is recv.pop() print 'passed.' except: print 'failed.' # starts the program if __name__ == '__main__': main() </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload