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 pythonfrom multiprocessing import Pool
from multiprocessing.dummy import Pool as ThreadPool
import urllib2urls = [
'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

转载于:https://www.cnblogs.com/improvement/p/6947231.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/269240.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

arm-linux 交叉编译链接动态库使用

alientekubuntu16:~/code/256APP/App/Module256App/test$ cat build.sh arm-linux-gnueabihf-g TestModule.cpp -I ../include -L ../lib/release -L ./ libModuleSdk.so -L ./ libHalAPI.so -stdc11 -I :指定库的头文件目录 -L :指定库文件.so 所在…

2007高考:考生要根据家庭经济条件慎重填报按办学成本收费的高校及专业

2007高考:考生要根据家庭经济条件慎重填报按办学成本收费的高校及专业来源:[url]http://www.accp-teem.com.cn/ArticleView/2007-7-14/Article_View_1181.Htm[/url] 近年来,普通高校招生中中外合作办学的专业越来越多,中外合作办学…

mybatis中大于等于小于等于的写法

第一种写法&#xff08;1&#xff09;&#xff1a;原符号 < < > > & " 替换符号 < < > > &amp; &apos; &quot; 例如&#xff1a;sql如下&#xff1a; create_date…

makefile编写

多源文件 第三方库 testApp:testApp.o UdpSender.o arm-linux-gnueabihf-g -o testApp testApp.o UdpSender.o -L ./test libi2csmbus.so libads1115.so libHalAPI.so libModuleSdk.so -lpthread --stdgnu11 testApp.o: testApp.cpparm-linux-gnueabihf-g -c testApp.cpp -I…

C++习题 虚函数-计算图形面积

C习题 虚函数-计算图形面积 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 122 Solved: 86[Submit][Status][Web Board]Description 编写一个程序&#xff0c;定义抽象基类Shape&#xff0c;由它派生出5个派生类&#xff1a; Circle(圆形)、Square(正方形)、Rectangle(矩形…

〈理解〉OSI七层

第7层<Application应用层>—直接对应用程序提供服务&#xff0c;应用程序可以变化&#xff0c;但要包括电子消息传输第6层<Presentation表示层>—格式化数据&#xff0c;以便为应用程序提供通用接口。这可以包括加密服务、解压第5层<Session会话层>—在两个节…

Ubuntu 开机 Firmware Bug , Bios corrupted

因为Windows 死机&#xff0c;断电后 vmware 虚拟机开机后、进入ubuntu 出现linux启动选项 进入后界面无法打开 一直是命令输入行 解决方法 输入命令&#xff1a;fsck -y /dev/sda1 等待完成修复后再输入 exit

Vboxmanage改动uuid报错的解决的方法

我的环境&#xff1a; Virtualbox 4.3.10 r93012 操作系统&#xff1a;win7 问题&#xff1a;Virtualbox在使用拷贝的虚拟盘时会提示uuid冲突&#xff1a; Because a hard disk with uuid ‘’ already exists. 依照网上的说法&#xff0c;执行VBoxManage改动uuid报错&#xff…

SQL Server连接中的常见错误

SQL Server连接中的常见错误:一."SQL Server 不存在或访问被拒绝"这个是最复杂的,错误发生的原因比较多,需要检查的方面也比较多.一般说来,有以下几种可能性:1,SQL Server名称或IP地址拼写有误2,服务器端网络配置有误3,客户端网络配置有误要解决这个问题,我们一般要遵…

QT源码交叉编译

交叉编译QT 源码 板子&#xff1a;全志 V3S , arm32位cpu ubuntu 虚拟机搭建好交叉编译链环境&#xff0c;添加环境变量 ok3399ubuntu:~$ echo $PATH /opt/OK3399-linux-release/host/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/lo…

JQ表单序列化变成 对象

JQ表单序列化变成 对象 function serializeObject(form) { var o {}; $.each(form.serializeArray(), function(index) { if (o[this[name]]) { o[this[name]] o[this[name]] ";" this[value]; } else { o[this[name]] this[value]; } }); return o;} 、、、、、…

即将从TechReady5归来

TechReady是微软内部面向Services、DPE、TS等部门的技术会议&#xff0c;每年两次&#xff0c;这次是第5次。听了几天课&#xff0c;虽说很多内容有点旧&#xff0c;但其中还是有不少好的东东&#xff0c;呵呵。 TechReady5的第2天&#xff0c;Bill Gates给了一节General Sessi…

linux交叉编译无法识别gcc编译器

使用 arm gcc 编译时候 32位编译器无法识别 原因没有安装下面两个库导致我当时编译 qt 源码时报没有 compiler 在 编译工具存放文件夹下 查看编译器版本也无法识别编译器 64位ubunutu安装 32 位依赖库后即可 sudo apt-get install lib32ncurses5 lib32z1sudo apt-getinstall …

安装redis出现cc adlist.o /bin/sh:1:cc:not found

安装redis时 提示执行make命令时&#xff0c; 提示 CC adlist.o /bin/sh: cc: 未找到命令 问题原因&#xff1a;这是由于系统没有安装gcc环境&#xff0c;因此在进行编译时才会出现上面提示&#xff0c;当安装好gcc后再进行编译时&#xff0c;上面错误提示将消失。 解决方法&am…

理想的 ASP.NET AJAX (Part 1 - Client Centric)

怎样的AJAX才算是理想&#xff1f; 要说什么是理想的ASP.NET AJAX&#xff0c;就要先说说什么是理想的AJAX。事实上AJAX最不理想的地方在于search engine friendly以及bookmarkable&#xff0c;这两个问题有一定的相似性&#xff0c;要解决并不难&#xff0c;只是每一个系统中实…

QT 发布程序到开发板

设置 IP 与开发板同一网段 设置一个device 设置开发板平台的 kit , 选择 device 设备为刚刚设置好的 pro 文件加入代码设置远程发布安装路径 INSTALLS target target.path /root/home/ftp5. 重新qmake工程完成设置 6. 是程序可以在板上运行&#xff0c; 之前这里一直…

Hibernate(十):n-n关联关系

背景&#xff1a;在实际开发中我们会遇到表的多对多关联&#xff0c;比如&#xff1a;一篇博客文章&#xff0c;它可以同时属于JAVA分类、Hibernate分类。 因此&#xff0c;我们在hibernate的学习文章系列中&#xff0c;需要学会如何使用hibernate来实现多对多的关联关系。 在h…