python多线程编程(1): python对多线程的支持

From: http://www.cnblogs.com/holbrook/archive/2012/03/01/2376408.html

 

前面介绍过多线程的基本概念,理解了这些基本概念,掌握python多线程编程就比较容易了。

在开始之前,首先要了解一下python对多线程的支持。

虚拟机层面

Python虚拟机使用GIL(Global Interpreter Lock,全局解释器锁)来互斥线程对共享资源的访问,暂时无法利用多处理器的优势。

语言层面

在语言层面,Python对多线程提供了很好的支持,Python中多线程相关的模块包括:thread,threading,Queue。可以方便地支持创建线程、互斥锁、信号量、同步等特性。

thread:多线程的底层支持模块,一般不建议使用。

threading:对thread进行了封装,将一些线程的操作对象化,提供下列类:

Thread 线程类

Timer与Thread类似,但要等待一段时间后才开始运行

Lock 锁原语

RLock 可重入锁。使单线程可以再次获得已经获得的锁

Condition 条件变量,能让一个线程停下来,等待其他线程满足某个“条件”

Event 通用的条件变量。多个线程可以等待某个事件发生,在事件发生后,所有的线程都被激活

Semaphore为等待锁的线程提供一个类似“等候室”的结构

BoundedSemaphore 与semaphore类似,但不允许超过初始值

Queue:实现了多生产者(Producer)、多消费者(Consumer)的队列,支持锁原语,能够在多个线程之间提供很好的同步支持。提供的类:

Queue队列

LifoQueue后入先出(LIFO)队列

PriorityQueue 优先队列

 

其中Thread类是你主要的线程类,可以创建进程实例。该类提供的函数包括:

getName(self) 返回线程的名字

isAlive(self) 布尔标志,表示这个线程是否还在运行中

isDaemon(self) 返回线程的daemon标志

join(self, timeout=None) 程序挂起,直到线程结束,如果给出timeout,则最多阻塞timeout秒

run(self) 定义线程的功能函数

setDaemon(self, daemonic)  把线程的daemon标志设为daemonic

setName(self, name) 设置线程的名字

start(self) 开始线程执行

 

第三方支持

如果你特别在意性能,还可以考虑一些“微线程”的实现:

Stackless Python:Python的一个增强版本,提供了对微线程的支持。微线程是轻量级的线程,在多个线程间切换所需的时间更多,占用资源也更少。

greenlet:是 Stackless 的副产品,其将微线程称为 “tasklet” 。tasklet运行在伪并发中,使用channel进行同步数据交换。而”greenlet”是更加原始的微线程的概念,没有调度。你可以自己构造微线程的调度器,也可以使用greenlet实现高级的控制流。

下一节,将开始用python创建和启动线程。

本人已在github上用Jekyll建立了新的博客:http://thinkinside.tk/,本站文章会陆续迁移过去

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

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

相关文章

三个数从小到大排序

描述 现在要写一个程序,实现给三个数排序的功能 输入输入三个正整数 输出给输入的三个正整数排序 样例输入20 7 33 样例输出 7 20 33 测试代码 1 #include "stdio.h"2 3 int main()4 {5 int a, b, c, t;6 scanf("%d%d%d", &a, &…

监听vuex的某条数据

需要现在计算属性里获取 computed: {tabType: {get() {return this.$store.state.tabType;},set(val) {this.$store.state.tabType val;},}},watch: {tabType(val) {this.allType this.$store.state.tabType;}, }

dup和dup2的使用方法

/*本文通过标准输出的重定向和恢复的过程来解释dup和dup2的使用方法*/#include <stdio.h> #include <unistd.h>#include <fcntl.h>//STDIN_FILENO标准输入描述符&#xff08;0&#xff09;//STDOUT_FILENO标准输出描述符&#xff08;1&#xff09; //STDERR_…

django时间问题和时区设置

django里默认设置了一个时区&#xff0c;我在django里调time获取时间&#xff0c;与系统时间出现不一致的情况&#xff0c;所以我们需要重启设置时区&#xff0c;如下&#xff1a;在settings.py里面把TIME_ZONE设为&#xff1a;Etc/GMT-8 转载于:https://blog.51cto.com/linuxs…

python多线程编程(2): 线程的创建、启动、挂起和退出

From: http://www.cnblogs.com/holbrook/archive/2012/03/02/2376940.html 如上一节&#xff0c;python的threading.Thread类有一个run方法&#xff0c;用于定义线程的功能函数&#xff0c;可以在自己的线程类中覆盖该方法。而创建自己的线程实例后&#xff0c;通过Thread类的…

记录ie下报XMLHttpRequest: 网络错误 0x80070005, 拒绝访问。

问题&#xff1a; 同样的调用接口&#xff0c;在谷歌是没有问题的&#xff0c;但是在ie下报错XMLHttpRequest: 网络错误 0x80070005, 拒绝访问。 1.分析&#xff1a; 对比了一下&#xff0c;相同的是接口传递参数错误导致报错&#xff0c;传递的参数自动带上了 " "…

getopt和getopt_long函数

平时在写程序时常常需要对命令行参数进行处理&#xff0c;当命令行参数个数较多时&#xff0c;如果按照顺序一个一个定义参数含义很容易造成混乱&#xff0c;而且如果程序只按顺序处理参数的话&#xff0c;一些“可选参数”的功能将很难实现。 在Linux中&#xff0c;我们可以使…

MVC3.0+DWZ探索

将themes 文件移到 js文件 index.html 转载于:https://www.cnblogs.com/acyy/archive/2012/08/03/2621594.html

棋盘覆盖

在一个2k x 2k ( 即&#xff1a;2^k x 2^k )个方格组成的棋盘中&#xff0c;恰有一个方格与其他方格不同&#xff0c;称该方格为一特殊方格&#xff0c;且称该棋盘为一特殊棋盘。在棋盘覆盖问题中&#xff0c;要用图示的4种不同形态的L型骨牌覆盖给定的特殊棋盘上除特殊方格以外…

VMM2012应用指南之12- 创建自助服务用户并分配云

河北经贸大学 王春海如果要在云中创建、管理虚拟机&#xff0c;首先要创建自助服务帐户&#xff0c;在创建用户角色的同时即可以分配云。本节介绍这部分内容。【说明】在做下面的这个操作的时候&#xff0c;需要向“库”服务器再添加另外一个库的路径&#xff0c;用于保存云中的…

分隔符字符串处理(strtok与strsep区别)

1、strtok原型与应用原型&#xff1a;char *strtok(char *src, const char *delim);功能&#xff1a;将src(原字符串)根据delim(分隔符串)分解为不同子串&#xff08;连续算一个&#xff09;返回&#xff1a;属于当前分割的子串&#xff0c;当前没有分割的子串时返回NULL#inclu…

解决vue项目在ie浏览器下白屏问题;ie运行项目报正在兼容性是图中运行,因为选中了“在兼容性视图中显示Intranet站点”

如果已经配置了babel-polyfill&#xff0c;在ie下依然白屏&#xff0c;打开控制台刷新&#xff0c;看看是否报 正在兼容性是图中运行&#xff0c;因为选中了“在兼容性视图中显示Intranet站点” 如图 解决方案 在ie浏览器—设置—兼容性视图设置&#xff08;B&#xff09;…

第六次java作业

package choujiang; import java.util.ArrayList; import java.util.Collections; import java.util.Random; public class ChouJiang { private ArrayList List; public void deal(){ //向List容器中顺序添加指定数量num的整数 if (List null){ List new ArrayList(); for(i…

自已脚本开发常用的底层方法

脚本下载地址&#xff1a;/Files/cocoxye/winBasics.rar 仅适用于原生脚本开发&#xff0c;同jquery会有冲突&#xff0c;主要存在于$选择器上。 常用变量 docdocument doedoc.documentElement sliceArray.prototype.slice Ie是否为IE浏览器 Ie6是否为IE6浏览器 webkit是否为we…

python多线程编程(4): 死锁和可重入锁

From: http://www.cnblogs.com/holbrook/archive/2012/03/08/2385449.html 在线程间共享多个资源的时候&#xff0c;如果两个线程分别占有一部分资源并且同时等待对方的资源&#xff0c;就会造成死锁。尽管死锁很少发生&#xff0c;但一旦发生就会造成应用的停止响应。下面看一…

ie浏览器跨域报错问题;Access-Control-Allow-Headers 列表不存在请求表头 content-type;XMLHTTPRequest:网络错误 0x80070005,拒绝访问。

问题&#xff1a; 这段是我在main.js下设置的&#xff0c;为了在请求头上添加后端需要的参数sessionId 和xrequestedwith &#xff0c;在谷歌下是正常的&#xff0c;ie报Access-Control-Allow-Headers 列表不存在请求表头 content-type&#xff1b;XMLHTTPRequest:网络错误 0x…

如何使用repo sync

我們知道 repo 是 Google 為 Android source tree 的管理而寫的一個 script&#xff0c;以方便處理 Android 源碼包含的上百個 git repositories。要取得 upstream 最新的 code&#xff0c;只要下 repo sync 就行。它相當於對每個 project 做 git pull 的動作。不過如果你曾對 …

python多线程编程(5): 条件变量同步

From: http://www.cnblogs.com/holbrook/archive/2012/03/13/2394811.html 互斥锁是最简单的线程同步机制&#xff0c;Python提供的Condition对象提供了对复杂线程同步问题的支持。Condition被称为条件变量&#xff0c;除了提供与Lock类似的acquire和release方法外&#xff0c…

Prototype 字符串

2019独角兽企业重金招聘Python工程师标准>>> 原文地址&#xff1a;http://www.yiibai.com/prototype/prototype_string_processing.html Prototype 字符串处理&#xff1a;方法操作使用例子 - 学习如何操纵DOM和AJAX使用Prototype JavaScript框架.Prototype提高了一…