python进程和线程

python 进程和线程

概念

GIL:
全局解释锁,解决了不同线程同时访问统一资源时,数据保护问题。python 虽然是多线程,但是因为GIL,实际上是是单线程,由CPU轮询,假线程。(一个线程运行一段时间后会释放GIL, 另一个线程获取GIL便会执行,然后再释放)

进程:
是具有一定独立功能的程序关于某个数据集合上的一次运行活动。进程是系统进行资源分配和调度的一个独立单位。(进程间通信方式:套接字,信号,管道,共享内存,消息队列)

线程:
是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位。(共享内存,变量,)

总结

多进程: 多用于(CPU密集型)计算密集型任务(cpu核越多速度越快)

多线程(伪线程): IO密集型任务,例如网络WEB服务器就是一个例子,每秒钟能处理多少个请求是web服务器的重要指标。

常见的消息机制

RabbitMQ ZeroMQ Kafka AWS SQS + BOTO

Python 开源框架对分布式的并发管理手段

  • Celery
    Celery是一个非常成熟的Python分布式框架,可以在分布式的系统中,异步的执行任务,并提供有效的管理和调度功能。参考这里(http://my.oschina.net/taogang/blog/386077)

  • SCOOP
    SCOOP (Scalable COncurrent Operations in Python)提供简单易用的分布式调用接口,使用Future接口来进行并发。

  • Dispy
    相比起Celery和SCOOP,Dispy提供更为轻量级的分布式并行服务

  • PP
    PP (Parallel Python)是另外一个轻量级的Python并行服务, 参考这里(http://my.oschina.net/taogang/blog/386512)

  • Asyncoro
    Asyncoro是另一个利用Generator实现分布式并发的Python框架,

应用

线程: from multiprocessing.dummy import Pool (线程池(真线程))

#!/usr/bin/env python

from multiprocessing import Pool
from multiprocessing.dummy import Pool as ThreadPool
import urllib2


urls = [
'http://www.baidu.com',
'http://www.taobao.com',
]
pool = ThreadPool(4)
# pool = Pool()
results = pool.map(urllib2.urlopen, urls)

pool.close()
pool.join()

#KeyboardInterrupt, SystemExit
posted @ 2017-06-05 21:41  self-imporvement  阅读(377)  评论(0编辑  收藏  举报