#!/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. python上下文小记

    python访问数据库是日常编程中经常使用的,一般的代码如下: 可以看出样例代码还是比较多的,有没有办法优化一下呢?有! def send_msgs(conn_id=None, **kwargs): ...

  2. 安装wget 、 wget命令

    今天给服务器安装新LNMP环境时,wget 时提示 -bash:wget command not found,很明显没有安装wget软件包.一般linux最小化安装时,wget不会默认被安装. 可以通 ...

  3. other备忘

    wps CONCATENATE 只是因为格式 设置成了文本,把这列 格式 设置成 常规,双击下 结果就出来了 https://zhidao.baidu.com/question/21208668961 ...

  4. Django中三种方式写form表单

    除了在html中自己手写form表单外,django还可以通过 继承django.forms.Form 或django.forms.ModelForm两个类来自动生成form表单,下面依次利用三种方式 ...

  5. 原生vue实现表格的编辑,包括单元格合并,拆分,删除行/列, 添加行/列

    先看效果图如下:  代码看这里: https://github.com/YalongYan/vue-table-edit

  6. Linux安装配置JDK1.8

    JDK1.8 链接:http://pan.baidu.com/s/1nvGBzdR 密码:ziqb 1  在/usr/local   文件夹下新建一个文件夹software ,将JDK放到此文件夹中 ...

  7. 一些常用的java书籍的适看范围

    一些常用的java书籍的适看范围 Java三本经典的书: 1.Java核心技术书籍:适合查阅,遇到某个问题不清楚了,可以来此求证. 2.Effective  Java:对java底层的一些涉及内容,书 ...

  8. 安装flanal报错解决

    1.:Error registering network: failed to acquire lease: node "test4" pod cidr not assigned ...

  9. 【转】java获取当前年、月、日 、小时 、分钟、 秒、 毫秒

    public class Test { /** * 英文简写(默认)如:2010-12-01 */ public static String FORMAT_SHORT = "yyyy-MM- ...

  10. pandas中截取一列字符串中每行字符串的一部分

    import pandas as pd df = pd.DataFrame([[',1], [',2], [',3], [',4], [',5], [',6]],columns=['str','num ...