Note that there are some explanatory texts on larger screens.

plurals
  1. POPython function won't fully execute
    primarykey
    data
    text
    <p>This is a dummy class to test a multiprocess generator. It takes a queue to pass a message, and a number indicating the number of times the thread has been called. For some reason I cant get the first print in the while loop to execute <code>print ("Thread type 1 number %d run count %d") % (thread_number, count)</code> wont run but<code>print ("Killing thread type 1 number %d") % thread_number</code> does run. </p> <pre><code>class test_imports:#Test classes remove def import_1(self, control_queue, thread_number): print ("Import_1 number %d started") % thread_number# Does run run = True count = 1 while run == True: alive = control_queue.get() print ("Thread type 1 number %d run count %d") % (thread_number, count) #wont run count = count + 1 if alive == 't1kill': print ("Killing thread type 1 number %d") % thread_number # does run run = False break </code></pre> <p>Here is the completed code</p> <pre><code>import multiprocessing import time class test_imports:#Test classes remove def import_1(self, control_queue, thread_number): print ("Import_1 number %d started") % thread_number run = True count = 1 while run == True: alive = control_queue.get() print ("Thread type 1 number %d run count %d") % (thread_number, count) count = count + 1 if alive == 't1kill': print ("Killing thread type 1 number %d") % thread_number run = False break def import_2(self, control_queue, thread_number): print ("Import_2 number %d started") % thread_number run = True count = 1 while run == True: alive = control_queue.get() print ("Thread type 2 number %d run count %d") % (thread_number, count) count = count + 1 if alive == 't2kill': print ("Killing thread type 2 number %d") % thread_number run = False break class worker_manager: def __init__(self): self.children = {} def generate(self, control_queue, threadName, runNum): i = test_imports() if threadName == 'one': print ("Starting import_1 number %d") % runNum p = multiprocessing.Process(target=i.import_1, args=(control_queue, runNum)) self.children[threadName] = p p.start() elif threadName == 'two': print ("Starting import_2 number %d") % runNum p = multiprocessing.Process(target=i.import_2, args=(control_queue, runNum)) self.children[threadName] = p p.start() elif threadName == 'three': p = multiprocessing.Process(target=i.import_1, args=(control_queue, runNum)) print ("Starting import_1 number %d") % runNum p2 = multiprocessing.Process(target=i.import_2, args=(control_queue, runNum)) print ("Starting import_2 number %d") % runNum self.children[threadName] = p self.children[threadName] = p2 p.start() p2.start() else: print ("Not a valid choice choose one two or three") def terminate(self, threadName): self.children[threadName].join if __name__ == '__main__': # Establish communication queues control = multiprocessing.Queue() manager = worker_manager() runNum = int(raw_input("Enter a number: ")) threadNum = int(raw_input("Enter number of threads: ")) threadName = raw_input("Enter number: ") thread_Count = 0 print ("Starting threads") for i in range(threadNum): manager.generate(control, threadName, i) thread_Count = thread_Count + 1 time.sleep(runNum)#let threads do their thing print ("Terminating threads") for i in range(thread_Count): control.put("t1kill") control.put("t2kill") manager.terminate(threadName) </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