#!/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. Linux .bashrc

    Set environmental variable // 用:隔开 export PATH=$PATH:<PATH >:<PATH >:<PATH >:----- ...

  2. Nginx-HTTP之ngx_http_top_body_filter

    1. ngx_http_top_body_filter 该链表用于构造响应消息的响应正文. 大致有以下模块在该链表中插入了自己的函数: ngx_http_range_filter_module: ng ...

  3. Rocketmq异步发送消息

    package com.bfxy.rocketmq.quickstart; import java.util.List; import org.apache.rocketmq.client.excep ...

  4. 从数组中找出所有组合为s的数

    java版本 package numCombine; /** * 从数组中找出所有组合为s的数 * @author root * */ public class NumComberAll { publ ...

  5. 微信小程序入门---记事本增---删

    第一.如何获取input框的值(form表单提交除外) bindinput事件 <input type='text' placeholder="请输入内容" placehol ...

  6. 机器学习之保存与加载.pickle模型文件

    import pickle from sklearn.externals import joblib from sklearn.svm import SVC from sklearn import d ...

  7. openstack部署dashboard

    1.下载安装包 yum install openstack-dashboard 2.编辑配置文件 cp /etc/openstack-dashboard/local_settings /etc/ope ...

  8. PHP上传超大文件解决方案

    一提到大文件上传,首先想到的是啥??? 没错,就是修改php.ini文件里的上传限制,那就是upload_max_filesize.修改成合适参数我们就可以进行愉快的上传文件了.当然啦,这是一般情况下 ...

  9. 阿里云Centos7挂载数据盘

    查看磁盘情况 fdisk -l fdisk /dev/vdb 根据提示,分别输入 n. p. . enter.enter.wq fdisk -l mkfs.ext3 /dev/vdb1 挂载磁盘,写入 ...

  10. nginx配置静态资源关闭访问日志

    location ~ .*\.(css|js|gif|png|jpg|jpeg|bmp|swf)$ { root $root_path; access_log off; }