进程之间不能共享全局变量

线程之间共享全局变量,线程函数中的局部变量不是共享的!!

#--*utf- 8*--
from threading import Thread
import time g_num = 100 def work1():
global g_num
for i in range(3):
g_num += 1
print("-----in work1,g_num is %d-----"%g_num) def work2():
global g_num
print("-------in work2 ,g_num is %d-----"%g_num) print("---------线程创建之前g_num is %d---"%g_num) t1 = Thread(target=work1)
t1.start() #延时一会,保证t1线程中的事情做完
time.sleep(1) t2 = Thread(target=work2)
t2.start()

关于互斥锁,解决线程占用的问题!!!

上锁的代码越少越好!该加的时候才加!

#--*utf- 8*--
from threading import Thread ,Lock
import time g_num = 0 def work1():
global g_num
#上锁, 这个线程和work2线程都在抢着 对这个锁进行上锁,如果由1方成功的上锁
#那么导致一方会堵塞(一直等待)到这个锁被解开位置
mutex.acquire()
for i in range(100000):
g_num += 1
#解锁
#用来对mutex指向的这个锁, 进行解锁,,只要开了锁,那么接下来会让所有
#因为这个锁 被锁上的锁 而堵塞的线程,进行抢着上锁
mutex.release()
print("-----in work1,g_num is %d-----"%g_num) def work2():
global g_num
#上锁
mutex.acquire()
for i in range(100000):
g_num += 1
#解锁
mutex.release()
print("-------in work2 ,g_num is %d-----"%g_num) #创建一把互斥锁,这个锁默认是没有上锁的
mutex =Lock()
def main():
t1 = Thread(target=work1)
t1.start()
#延时一会,保证t1线程中的事情做完
# time.sleep(1) #取消屏蔽之后,再次运行程序
t2 = Thread(target=work2)
t2.start() if __name__ == '__main__':
main()

同步的应用!就是一个接着一个

#--*utf-8*---
#同步的应用!
#2018-6-23 19:51:59
from threading import Thread,Lock
from time import sleep class Task1(Thread):
def run(self):
while True :
if lock1.acquire():
print("------Task1----------")
sleep(0.5)
#给Task2开锁!
lock2.release() class Task2(Thread):
def run(self):
while True:
if lock2.acquire():
print("------Task2----------")
sleep(0.5)
#给Task3开锁
lock3.release() class Task3(Thread):
def run(self):
while True:
if lock3.acquire():
print("------Task3----------")
sleep(0.5)
lock1.release() #使用Lock创建出的锁默认没有"锁上"
lock1 = Lock()
#创建另外一个锁,并且锁上
lock2 = Lock()
lock2.acquire()
#创建另外一个锁,并且"锁上"
lock3 = Lock()
lock3.acquire() t1 = Task1()
t2 = Task2()
t3 = Task3() t1.start()
t2.start()
t3.start()

day_6.23py线程的更多相关文章

  1. [ 高并发]Java高并发编程系列第二篇--线程同步

    高并发,听起来高大上的一个词汇,在身处于互联网潮的社会大趋势下,高并发赋予了更多的传奇色彩.首先,我们可以看到很多招聘中,会提到有高并发项目者优先.高并发,意味着,你的前雇主,有很大的业务层面的需求, ...

  2. [高并发]Java高并发编程系列开山篇--线程实现

    Java是最早开始有并发的语言之一,再过去传统多任务的模式下,人们发现很难解决一些更为复杂的问题,这个时候我们就有了并发. 引用 多线程比多任务更加有挑战.多线程是在同一个程序内部并行执行,因此会对相 ...

  3. 多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类)

    前言:刚学习了一段机器学习,最近需要重构一个java项目,又赶过来看java.大多是线程代码,没办法,那时候总觉得多线程是个很难的部分很少用到,所以一直没下决定去啃,那些年留下的坑,总是得自己跳进去填 ...

  4. Java 线程

    线程:线程是进程的组成部分,一个进程可以拥有多个线程,而一个线程必须拥有一个父进程.线程可以拥有自己的堆栈,自己的程序计数器和自己的局部变量,但不能拥有系统资源.它与父进程的其他线程共享该进程的所有资 ...

  5. C++实现线程安全的单例模式

    在某些应用环境下面,一个类只允许有一个实例,这就是著名的单例模式.单例模式分为懒汉模式,跟饿汉模式两种. 首先给出饿汉模式的实现 template <class T> class sing ...

  6. 记一次tomcat线程创建异常调优:unable to create new native thread

    测试在进行一次性能测试的时候发现并发300个请求时出现了下面的异常: HTTP Status 500 - Handler processing failed; nested exception is ...

  7. Android线程管理之ThreadLocal理解及应用场景

    前言: 最近在学习总结Android的动画效果,当学到Android属性动画的时候大致看了下源代码,里面的AnimationHandler存取使用了ThreadLocal,激起了我很大的好奇心以及兴趣 ...

  8. C#多线程之线程池篇3

    在上一篇C#多线程之线程池篇2中,我们主要学习了线程池和并行度以及如何实现取消选项的相关知识.在这一篇中,我们主要学习如何使用等待句柄和超时.使用计时器和使用BackgroundWorker组件的相关 ...

  9. C#多线程之线程池篇2

    在上一篇C#多线程之线程池篇1中,我们主要学习了如何在线程池中调用委托以及如何在线程池中执行异步操作,在这篇中,我们将学习线程池和并行度.实现取消选项的相关知识. 三.线程池和并行度 在这一小节中,我 ...

随机推荐

  1. Android典型界面设计(5)——使用SlidingMenu和DrawerLayout分别实现左右侧边栏

    一.问题描述 侧边栏是Android应用中十分常见的界面效果,可随主屏在左侧或右侧联动,是特别适应手机等小屏幕特性的典型界面设计方案之一,常用作应用的操作菜单,如图所示 实现侧边栏可以使用第三方组件s ...

  2. 浅谈压缩感知(二十四):压缩感知重构算法之子空间追踪(SP)

    主要内容: SP的算法流程 SP的MATLAB实现 一维信号的实验与结果 测量数M与重构成功概率关系的实验与结果 SP与CoSaMP的性能比较 一.SP的算法流程 压缩采样匹配追踪(CoSaMP)与子 ...

  3. 最简单的配置Centos中JAVA的环境变量的方法

    一.用途 做云开发,经常用到配置java环境变量,但是每次都写太麻烦了,所以写本文,方便以后复制粘贴. 二.安装Java 1.搜索Java包:yum search java 2.安装Java包:yum ...

  4. 用 CPI 火焰图分析 Linux 性能问题

    https://yq.aliyun.com/articles/465499 用 CPI 火焰图分析 Linux 性能问题   yangoliver 2018-02-11 16:05:53 浏览1076 ...

  5. ZOJ 3827 Information Entropy 水

    水 Information Entropy Time Limit: 2 Seconds      Memory Limit: 65536 KB      Special Judge Informati ...

  6. 《ZooKeeper分布式专题与Dubbo微服务入门》

    最近在慕课网新上的课程,有兴趣的朋友可以关注一波 http://coding.imooc.com/class/201.html

  7. adb命令使用总结

    1.启动/停止 启动 adb server 命令: adb start-server (一般无需手动执行此命令,在运行 adb 命令时若发现 adb server 没有启动会自动调起.) 停止 adb ...

  8. 【原】使用Json作为Python和C#混合编程时对象转换的中间文件

    一.Python中自定义类对象json字符串化的步骤[1]   1. 用 json 或者simplejson 就可以: 2.定义转换函数: 3. 定义类 4. 生成对象 5.dumps执行,引入转换函 ...

  9. recyclerView插入(add)和删除(remove)item后,item错乱,重复,覆盖在原recyclerView上

    项目用到,实现一个recyclerView列表的item翻转动效,翻转的同时会将指定item置顶. (比如交换AB位置,A在0位置,指定的item B 在 i 位置) 原始使用的是插入B到0位置,然后 ...

  10. csharp中DateTime总结-转

    Table of Contents 1 时间格式输出 2 求某天是星期几 3 字符串转换为DateTime 3.1 String->DateTime 的弹性做法 4 计算2个日期之间的天数差 5 ...