郭德纲 张双喜捉妖,中国的秘密 王思聪,健康九州网赶牛阿旗
本文实例讲述了python多进程池 multiprocessing pool用法。分享给大家供大家参考,具体如下:
1. 背景
由于需要写python程序, 定时、大量发送htttp请求,并对结果进行处理。
参考其他代码有进程池,记录一下。
2. 多进程 vs 多线程
尽管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"
运行结果:
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
(3, 3)
(3, 4)
(4, 3)
(4, 4)
(5, 3)
(5, 4)
end
4. 参考
python 多进程 multiprocessing.pool类详解
python 多线程和多进程编程总结
python的全局锁问题
更多关于python相关内容感兴趣的读者可查看本站专题:《python进程与线程操作技巧总结》、《python数据结构与算法教程》、《python函数使用技巧总结》、《python字符串操作技巧汇总》、《python入门与进阶经典教程》、《python+mysql数据库程序设计入门教程》及《python常见数据库操作技巧汇总》
希望本文所述对大家python程序设计有所帮助。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
新手学习Python2和Python3中print不同的用法
Python基于os.environ从windows获取环境变量
网友评论