python实现多进程_multiprocessing
来源:互联网 发布:装修网络平台有哪些 编辑:程序博客网 时间:2024/05/29 17:05
使用multiprocessing模块来进行python的多进程编程。个人习惯使用类来继承原始的Process类进行处理,以下是模板,供以后拷贝使用。
#!/usr/bin/env python# -*- coding:utf8 -*-import os, os.pathimport timefrom multiprocessing import Process, cpu_countclass myProcess(Process): def __init__(self, *argus, **keywords): # argus 和 keywords中可以包括函数名等特殊类,不仅仅是字符串,数字,序列等常见数据类型 Process.__init__(self) self.argus = argus self.keywords = keywords def run(self): # 时间统计功能最好在run内实现。该函数内实现子进程的操作。 start_time = time.time() print ("Proc %d start: %s" % (self.proc_seq, time.ctime(start_time))) # 以下是自己的核心代码,即你希望该进程做任务,是批量任务的模板 # 个人核心代码结束 end_time = time.time() dur = end_time - start_time print ("Proc %d end: %s, Total time: %.2f" % (self.proc_seq, time.ctime(end_time), dur)) if __name__ == "__main__": import logging import sys logger = logging.getLogger() formatter = logging.Formatter('[%(filename)s:%(lineno)d] - [%(asctime)s] : *%(levelname)s* | (%(funcName)s) %(message)s', '%Y-%m-%d %H:%M:%S',) stream_handler = logging.StreamHandler() stream_handler.setFormatter(formatter) logger.addHandler(stream_handler) file_handler = logging.FileHandler(os.path.splitext(os.path.abspath(__file__))[0]+".log", 'w') file_handler.setFormatter(formatter) logger.addHandler(file_handler) logger.setLevel(logging.INFO) from optparse import OptionParser optparser = OptionParser() optparser.add_option('-i', "--input", dest="input", action="store", default=None, help="please input the input file/foldername") #optparser.add_option('-o', "--output", dest="output", action="store", default=None, help="please input the output folder name") options, args = optparser.parse_args() if len(args) != 0: print "wrong arguments format!" sys.exit(-1) if options.input == None: print "you have to give input or output folder or filenames!\nUsage: python maxmatch12r.py -i inputfolder/file -o outputfolder" sys.exit(-1) # 构建等于cpu核心个数的进程进行处理 core_num = cpu_count() # 个人代码,准备好不同数目子进程的参数 argus_list = [] keywords_list = [] # 首先,创建子进程,但是不开始运行 threads = [] for iproc in xrange(len(argus_list): cur_proc = myProcess(iproc, argus_list[iproc], keywords_list[iproc]) threads.append(cur_proc) # 创建好所有子进程后,再开始逐个运行 for iproc in threads: iproc.start() # 所有子进程都运行后,在进行父进程阻断 for iproc in threads: iproc.join() # 所有子进程完成后,回到父进程 logger.info("Done!")
经验是以下几点:
1. 把要让子进程做的事情,都写在run函数内,父进程就只管提供数据和代码即可。
2. 父进程调用子进程的步骤是:首先,创建所有的子进程;其次,逐个调用所有的子进程,不允许有其他操作(因为会被阻塞);最后,逐个调用join函数对父进程进行阻塞,保证子进程都运行完毕后再运行父进程。
0 0
- python实现多进程_multiprocessing
- python实现多进程
- Python -- 多进程实现
- 使用 Python 实现多进程
- 使用 Python 实现多进程
- 使用 Python 实现多进程
- 多进程的Python实现
- python利用subprocess实现多进程
- python 多进程实现文件下载传输
- Python 实现多进程复制文件
- Python 实现进程锁
- Python实现进程资源共享
- Python实现的守护进程
- Python 实现的守护进程
- Python实现Daemon(守护)进程
- Python守护进程daemon实现
- python 实现多进程和多线程的例子
- python多进程不同实现方法的异同点
- LeetCode 46. Permutations 解题报告
- Android事件分发<二>
- 学习C语言的一点感受
- win32主程序入口设置
- 剑指offer-包含min函数的栈
- python实现多进程_multiprocessing
- 高数个人资料整理
- Eclipse使用Maven创建Web时错误:Could not resolve archetype org.apache.maven.archetypes:maven-archetype-webap
- Android 实现Viewpager指示器
- Error:(1, 0) Cause: com/android/build/gradle/LibraryPlugin : Unsupported major.minor version 52.0
- 第五章 函数的秘密
- Unity3d中FingerGesture与NGUI的事件响应问题
- flume学习(一)
- vagrant系列五:Vagrant使用中遇到的坑