#!/usr/bin/python
# -*- coding: utf-8 -*
import multiprocessing
"""
通过多进程做加法计算
步骤:
1.创建任务队列,存放计算任务(a,b)
2.创建结果队列,存放计算结果c
3.创建进程,进程数可指定,建议不超过任务数,每个进程从任务队列里拿到计算任务进行运算,把结果存放到结果队列中
4.从结果队列里取出结果显示
"""
joblist = [(1,2),(3,4),(5,6),(7,8)]
def main():
print "begin"
concurrency = 4
result = process_handler(joblist, concurrency)
print result
print "end"
def process_handler(joblist, concurrency):
jobs_queue = multiprocessing.JoinableQueue()
results_queue = multiprocessing.Queue()
create_processes(jobs_queue, results_queue, concurrency)
jobs_num = add_jobs(joblist, jobs_queue)
print "%s jobs need to be handle" % jobs_num
try:
jobs_queue.join()
except Exception as e:
print e
resultlist = []
while not results_queue.empty():
resultlist.append(results_queue.get_nowait())
return resultlist
def create_processes(jobs_queue, results_queue, concurrency):
for _ in range(concurrency):
process = multiprocessing.Process(target=worker, args=(jobs_queue, results_queue))
process.daemon = True
process.start()
def add_jobs(joblist, jobs_queue):
for a,b in joblist:
jobs_queue.put((a,b))
return len(joblist)
def worker(jobs_queue, results_queue):
try:
a,b = jobs_queue.get()
result = add(a,b)
results_queue.put(result)
except Exception as e:
print e
finally:
jobs_queue.task_done()
return 0
def add(a, b):
return a+b
if __name__ == '__main__':
main()