Example Python3 Processes
processes.py
—
Python Source,
2 KB (2736 bytes)
File contents
#!/usr/bin/env python3
# Basic Python processes example
#
# Set script as executable via: chmod +x processes.py
import sys
import multiprocessing
import queue
import time
# Python-style process class
class ProcessDemo(multiprocessing.Process):
def __init__(self, name, startNum, q):
multiprocessing.Process.__init__(self)
# Set any variables you want in your constructor
self.name = name
self.startNum = startNum
self.q = q
# The run() method of a MultiprocessWorker class is run when
# process.start() is called. Do real work here
def run(self):
print("Running process '%s' starting at %d" % (self.name, self.startNum))
i=self.startNum
while(i < (self.startNum+10)):
print(self.name + ", Count " + str(i))
i=i+1
# "Busy work" for demo program.
# Otherwise, the processes will run so quickly
# that they will finish before the scheduler
# switches to a different process
j=0
while(j<400000):
j=j+1
# To exit the process, just return from the run() method
try:
while(True):
q_value = self.q.get(block=False)
print("Process '%s' has obtained value from Q: '%s'" % (self.name, q_value))
time.sleep(0.01) # Minimal sleep to let other process run
except queue.Empty as msg:
pass
# This error is EXPECTED and NOT fatal!
# We can't test if the queue is empty first, because
# we might get a race condition with the other process
def main():
print("Running in main()...")
# Create a queue so that we can send info to the process
# after it is running
q = multiprocessing.Queue()
print("Launching a pool of two processes...")
process1 = ProcessDemo("Process 1", 100, q)
process1.start()
process2 = ProcessDemo("Process 2", 200, q)
process2.start()
print("Launched two processes...")
# Build up a list of all processes
# (to make it easy to wait on them)
all_processes=[]
all_processes.append(process1)
all_processes.append(process2)
# Add some data to the queue and see if the processes
# will obtain it
q.put("Q item 1")
q.put("Q item 2")
q.put("Q item 3")
# Use the join() function to wait for a specific process to finish
# (i.e. process1.join() or process2.join())
print("Waiting for all processes to finish")
for one_process in all_processes:
one_process.join()
print("All processes have finished")
print("Exiting main()...")
if __name__ == "__main__":
sys.exit(main())
