Python多进程池 multiprocessing Pool
1. 背景
由于需要写python程序, 定时、大量发送htttp请求,并对结果进行处理。
参考其他代码有进程池,记录一下。
2. 多进程 vs 多线程
- c++程序中,单个模块通常是
单进程,会启动几十、上百个线程,充分发挥机器性能。(目前c++11有了std::thread编程多线程很方便,可以参考我之前的博客) - shell脚本中,都是
多进程后台执行。({ ...} &, 可以参考我之前的博客,实现shell并发处理任务) - python脚本有多线程和多进程。由于python全局解锁锁的GIL的存在,一般建议 CPU密集型应该采用多进程充分发挥多核优势,I/O密集型可以采用多线程。
尽管Python完全支持多线程编程, 但是解释器的C语言实现部分在完全并行执行时并不是线程安全的。
实际上,解释器被一个全局解释器锁保护着,它确保任何时候都只有一个Python线程执行。
GIL最大的问题就是Python的多线程程序并不能利用多核CPU的优势 (比如一个使用了多个线程的计算密集型程序只会在一个单CPU上面运行)。
3. multiprocessing pool使用例子
对Pool对象调用join()方法会等待所有子进程执行完毕,调用join()之前必须先调用close(),让其不再接受新的Process了
#coding=utf-8
import logging
import time
from multiprocessing import Pool
logging.basicConfig(level=logging.INFO, filename='logger.log')
class Point:
def __init__(self, x = 0, y= 0):
self.x = x
self.y = y
def __str__(self):
return "(%d, %d)" % (self.x, self.y)
def fun1(point):
point.x = point.x + 3
point.y = point.y + 3
time.sleep(1)
return point
def fun2(x):
time.sleep(1)
logging.info(time.ctime() + ", fun2 input x:" + str(x))
return x * x
if __name__ == '__main__':
pool = Pool(4)
#test1
mylist = [x for x in range(10)]
ret = pool.map(fun2, mylist)
print ret
#test2
mydata = [Point(x, y) for x in range(3) for y in range(2)]
res = pool.map(fun1, mydata)
for i in res:
print str(i)
#end
pool.close()
pool.join()
print "end"
4. 参考
Python多进程池 multiprocessing Pool的更多相关文章
- Python进程池multiprocessing.Pool的用法
一.multiprocessing模块 multiprocessing模块提供了一个Process类来代表一个进程对象,multiprocessing模块像线程一样管理进程,这个是multiproce ...
- python进程池multiprocessing.Pool和线程池multiprocessing.dummy.Pool实例
进程池: 进程池的使用有四种方式:apply_async.apply.map_async.map.其中apply_async和map_async是异步的,也就是启动进程函数之后会继续执行后续的代码不用 ...
- Python多进程库multiprocessing中进程池Pool类的使用[转]
from:http://blog.csdn.net/jinping_shi/article/details/52433867 Python多进程库multiprocessing中进程池Pool类的使用 ...
- Python多进程并发(multiprocessing)用法实例详解
http://www.jb51.net/article/67116.htm 本文实例讲述了Python多进程并发(multiprocessing)用法.分享给大家供大家参考.具体分析如下: 由于Pyt ...
- Python多进程库multiprocessing中进程池Pool类的使用
问题起因 最近要将一个文本分割成好几个topic,每个topic设计一个regressor,各regressor是相互独立的,最后汇总所有topic的regressor得到总得预测结果.没错!类似ba ...
- Python多进程库multiprocessing创建进程以及进程池Pool类的使用
问题起因最近要将一个文本分割成好几个topic,每个topic设计一个regressor,各regressor是相互独立的,最后汇总所有topic的regressor得到总得预测结果.没错!类似bag ...
- 【python小随笔】进程池 multiprocessing.Pool的简单实现与踩过的坑
#导入进程模块 import multiprocessing #创建进程池 坑:一定要在循环外面创建进程池,不然会一直创建 pool = multiprocessing.Pool(30) for Si ...
- Python 多进程池
def get_html(n): time.sleep(n) print("sub_progress success") return n # 多进程池 pool = multip ...
- python 多进程处理 multiprocessing模块
前提: 有时候一个用一个进程处理一个列表中的每个元素(每个元素要传递到一个函数中进行处理),这个时候就要用多进程处理 1 现场案例: 我有一个[ip1,ip2,ip3,.......]这样的列表,我要 ...
随机推荐
- Codeforces 1139D Steps to One dp
Steps to One 啊, 我要死了, 这种垃圾题居然没写出来, 最后十分钟才发现错在哪. 不知道为什么我以为 对于一个数x , 除了它的因子和它的倍数都是和它互质的, 我脑子是抽了吗? 随便瞎d ...
- Linux read line
cat ./port_list|while read linedo done
- c# 调apicontroller
public string Post(ModelCs mod) { string formData = Newtonsoft.Json.JsonConvert.SerializeObject(mod) ...
- bitset里面一些函数的用法
- Django 学习第四天——Django 模板标签
一.模板标签: 作用:标签在渲染的过程中提供任意的逻辑:例如 if for...in... 等 标签语法:由 {% %} 来定义的:例如:{% tag %}xxx{% endtag %} 常用标签: ...
- ord() expected string of length 1, but int found
源代码是这样: s=b'^SdVkT#S ]`Y\\!^)\x8f\x80ism' key='' for i in s: i=ord(i)-16 key+=chr(i^32) prin ...
- Xamarin Essentials教程实现数据的传输功能实例
Xamarin Essentials教程实现数据的传输功能实例 [示例1-1]以下将实现数据的传输功能.代码如下: public async Task ShareUri(string text, st ...
- c#取数据库数据 ---两种方法
通常有以下两种方式 SqlDataReader 和SqlDataAdapter|DataSet方式 SqlDataReader 方式使用方式如下: using System; using System ...
- Vue常用模块
1.npm install Vue-Awesome-Swiper@v2.6.7 --save 实现轮播图 2.npm install axios 发送请求get,post
- python3.6.5 + selenium +VS Code 运行报错:Unable to find a matching set of capabilities的解决
在python3.6.5 + selenium +VS Code 环境中,在class的__init__ 方法初始化火狐浏览器时出现以下错误: 发生异常: selenium.common.except ...