#!/usr/bin/python
# -*- coding:utf8 -*- from threading import Thread, Lock
import random def test_thread():
# 线程间的通信
# 使用锁来控制共享资源的访问
a = 0
n = 10000000
lock = Lock() def imcr(n):
global a
for i in range(n):
lock.acquire() # 可以写成with lock:
a += 1 # a+=1
lock.release() def decr(n):
for i in range(n):
global a
lock.acquire()
a -= 1
lock.release() t = Thread(target=imcr, args=(n,))
t2 = Thread(target=decr, args=(n,))
t.start() t2.start()
t.join()
t2.join()
print(a) # 多线程的消费者与生产者模式
# from threading import Thread
from queue import Queue q = Queue(3) class Producter(Thread):
def __init__(self, queue):
super().__init__()
self.queue = queue def run(self):
while True:
item = random.randint(0, 99)
self.queue.put(item)
print('已产生%s' % item) class Consumer(Thread):
def __init__(self, queue):
super().__init__()
self.queue = queue def run(self):
while True:
item = self.queue.get()
print(item)
self.queue.task_done() # 告诉队列这个任务执行完成 product = Producter(q)
consumer = Consumer(q)
product.start()
consumer.start() # 注意,mgr=Manger() q.mgr.Queue()
# 进程版本的需要加一个input()或者是
# producter.join consumer.join() 因为一旦主进程结束,代码就不会继续运行了

python线程间通信的更多相关文章

  1. python 线程间通信之Condition, Queue

    Event 和 Condition 是threading模块原生提供的模块,原理简单,功能单一,它能发送 True 和 False 的指令,所以只能适用于某些简单的场景中. 而Queue则是比较高级的 ...

  2. Python简单线程间通信

    本节主要举一个简单的线程间通信的例子,利用线程安全的数据结构queue.Queue保存线程间通信的内容, import queue from threading import Thread from ...

  3. 0038 Java学习笔记-多线程-传统线程间通信、Condition、阻塞队列、《疯狂Java讲义 第三版》进程间通信示例代码存在的一个问题

    调用同步锁的wait().notify().notifyAll()进行线程通信 看这个经典的存取款问题,要求两个线程存款,两个线程取款,账户里有余额的时候只能取款,没余额的时候只能存款,存取款金额相同 ...

  4. 线程间通信 GET POST

    线程间通信有三种方法:NSThread   GCD  NSOperation       进程:操作系统里面每一个app就是一个进程. 一个进程里面可以包含多个线程,并且我们每一个app里面有且仅有一 ...

  5. Java多线程编程核心技术---线程间通信(二)

    通过管道进行线程间通信:字节流 Java提供了各种各样的输入/输出流Stream可以很方便地对数据进行操作,其中管道流(pipeStream)是一种特殊的流,用于在不同线程间直接传送数据,一个线程发送 ...

  6. Java多线程编程核心技术---线程间通信(一)

    线程是操作系统中独立的个体,但这些个体如果不经过特殊处理就不能成为一个整体.线程间的通信就是成为整体的必用方案之一.线程间通信可以使系统之间的交互性更强大,在大大提高CPU利用率的同时还会使程序员对各 ...

  7. volatile关键字与线程间通信

    >>Java内存模型 现在计算机普遍使用多处理器进行运算,并且为了解决计算机存储设备和处理器的运算速度之间巨大的差距,引入了高速缓存作为缓冲,缓存虽然能极大的提高性能,但是随之带来的缓存一 ...

  8. 06_Java多线程、线程间通信

    1. 线程的概念      1.1多进程与多线程 进程:一个正在执行的程序.每个进程执行都有一个执行顺序,该顺序是一个执行路径,或叫一个控制单元. 一个进程至少有一个线程. 线程:就是进程中的一个独立 ...

  9. 【原】iOS多线程之线程间通信和线程互斥

    线程间通信 1> 线程间通信分为两种 主线程进入子线程(前面的方法都可以) 子线程回到主线程 2> 返回主线程 3> 代码 这个案例的思路是:当我触摸屏幕时,会在子线程加载图片,然后 ...

随机推荐

  1. mysql:unknown variable 'default-character-set=utf8'

    1.修改my.cnf后,执行 service mysql restart 重启数据库失败 service mysql restart Shutting down MySQL.. SUCCESS! St ...

  2. Docker小记

    1.Docker的安装 这里给一个比较通用的教程 Ubuntu 14.04 16.04 (使用apt-get进行安装) # step : 安装必要的一些系统工具 sudo apt-get update ...

  3. QT .pro文件中的变量说明

      https://blog.csdn.net/tanou3212/article/details/79942840 TEMPLATE:定义了工程的编译模式 赋值方式为:TEMPLATE=app (1 ...

  4. docker进入容器的四种方法

    在使用Docker创建了容器之后,大家比较关心的就是如何进入该容器了,其实进入Docker容器有好几多种方式,这里我们就讲一下常用的几种进入Docker容器的方法. 进入Docker容器比较常见的几种 ...

  5. PCL点云库(Point Cloud Library)简介

    博客转载自:http://www.pclcn.org/study/shownews.php?lang=cn&id=29 什么是PCL PCL(Point Cloud Library)是在吸收了 ...

  6. Laplacian eigenmap 拉普拉斯特征映射

    下面是实验室大牛师兄自己写的一段总结,主要内容是Laplacian Eigenmap中的核心推导过程. 有空还是多点向这位师兄请教,每次都会捡到不少金子. Reference : <Laplac ...

  7. MongoDB的安装及配置(Win7)

    一.下载MongoDB 登录Mongodb官网https://www.mongodb.com/download-center#community 二.安装MongoDB 安装真的比较简单 next就可 ...

  8. JavaScript(7)——DOM

    什么是 DOM? DOM是 Document Object Model(文档对象模型)的缩写 DOM是 W3C(万维网联盟)的标准. DOM 定义了访问 HTML 和 XML 文档的标准: “W3C ...

  9. SSD是什么

    SSD即固态硬盘,相较于HDD(机械硬盘),硬件上最主要的区别就是存储介质发生了改变,SSD采用NAND Flash作为存储介质,而HDD采用磁盘作为存储介质.虽然这两种存储介质都是非易失性的,但是他 ...

  10. 纹理特征描述之自相关函数法 纹理粗糙性与自相关函数的扩展成正比 matlab代码实现

    图像中通常采用自相关函数作为纹理测度 自相关函数的定义为: ​ 调用自定义函数 zxcor()对砖墙面和大理石面纹理进行分析: 自定义函数 zxcor(): function [epsilon,eta ...