Python多线程的运行及time.sleep()的应用
已知小明和其弟弟小白每月都需要生活费,二人同时从同一个账户中取钱,两人每人每月需要1000元,账户中现有余额3200元,如果卡内余额大于2000元,则父母不会存入,如果卡内余额小于2000元,则父母当月会向卡内一次存入3500元。4个月后,卡内所剩余额是多少?
这道题可以运用多线程互相抢夺的性质来写
import threading
import time
lock=threading.Lock()
money=3200
def take(name):
for i in range(4):
print(i)
global money
lock.acquire()
money-=1000
print(name,"取走1000元,卡里余额是:",money)
lock.release()
time.sleep(1.1)
def save():
global money
for i in range(4):
if money>2000:
pass
else:
money+=3500
print("父母存入了3500元钱,卡内余额为:",money)
time.sleep(1) t1=threading.Thread(target=save)
t2=threading.Thread(target=take,args=("小明",))
t3=threading.Thread(target=take,args=("小白",))
t1.start()
t2.start()
t3.start()
因为for循环写在锁外,所以i会成为抢夺的对象,同时每个线程都会将循环一遍,当循环的范围大时,会乱序,但是每个线程都会循环一遍,结果如下
def take(name):
for i in range(4):
print(i)
global money
lock.acquire()
money-=1000
print(name,"取走1000元,卡里余额是:",money)
lock.release()
#time.sleep(1.1)
0
小明 取走1000元,卡里余额是: 2200
1
小明 取走1000元,卡里余额是: 1200
2
小明 取走1000元,卡里余额是: 200
3
小明 取走1000元,卡里余额是: -800
0
小白 取走1000元,卡里余额是: -1800
1
小白 取走1000元,卡里余额是: -2800
2
小白 取走1000元,卡里余额是: -3800
3
小白 取走1000元,卡里余额是: -4800
time.sleep()的作用
由上边结果可以看出两个线程都循环了四次,而小明和小白这四个月每个月都需要取钱,所以两个人都需要取四次,而且每个月取的钱数也是一样的,他们可以运行同一个函数,这样显得简洁又高大上,因此可以通过线程抢夺的性质和线程休眠来做这道题。
使用time.sleep()是为了让两个线程运行的顺序成为(以i为代表)0,0,1,1,2,2,3,3。当小明或小白抢到时,它通过锁取完钱后,执行到sleep(),这个线程就会休眠,这时就剩另外一个线程来运行,当它取完钱,同样休眠,父母存钱的线路也是同样的。
一个线程运行一次就休眠,让路给其他没运行过的线程让他们来运行,从而使他们可以几个线程一循环,例如,t1,t2,t3三个线程,他的运行顺序就是(t1,t2,t3),(t1,t2,t3),(t1,t2,t3(这三个线程的顺序是乱序的,没有规律))····
最终完整的代码结果为
0
小明 取走1000元,卡里余额是: 2200
0
小白 取走1000元,卡里余额是: 1200
父母存入了3500元钱,卡内余额为: 4700
1
小白 取走1000元,卡里余额是: 3700
1
小明 取走1000元,卡里余额是: 2700
2
小白 取走1000元,卡里余额是: 1700
2
小明 取走1000元,卡里余额是: 700
父母存入了3500元钱,卡内余额为: 4200
3
3
小白 取走1000元,卡里余额是: 3200
小明 取走1000元,卡里余额是: 2200
Python多线程的运行及time.sleep()的应用的更多相关文章
- python多线程编程
Python多线程编程中常用方法: 1.join()方法:如果一个线程或者在函数执行的过程中调用另一个线程,并且希望待其完成操作后才能执行,那么在调用线程的时就可以使用被调线程的join方法join( ...
- Python 多线程教程:并发与并行
转载于: https://my.oschina.net/leejun2005/blog/398826 在批评Python的讨论中,常常说起Python多线程是多么的难用.还有人对 global int ...
- python多线程
python多线程有两种用法,一种是在函数中使用,一种是放在类中使用 1.在函数中使用 定义空的线程列表 threads=[] 创建线程 t=threading.Thread(target=函数名,a ...
- python 多线程就这么简单(转)
多线程和多进程是什么自行google补脑 对于python 多线程的理解,我花了很长时间,搜索的大部份文章都不够通俗易懂.所以,这里力图用简单的例子,让你对多线程有个初步的认识. 单线程 在好些年前的 ...
- python 多线程就这么简单(续)
之前讲了多线程的一篇博客,感觉讲的意犹未尽,其实,多线程非常有意思.因为我们在使用电脑的过程中无时无刻都在多进程和多线程.我们可以接着之前的例子继续讲.请先看我的上一篇博客. python 多线程就这 ...
- 【python,threading】python多线程
使用多线程的方式 1. 函数式:使用threading模块threading.Thread(e.g target name parameters) import time,threading def ...
- Python多线程和Python的锁
Python多线程 Python中实现多线程有两种方式,一种基于_thread模块(在Python2.x版本中为thread模块,没有下划线)的start_new_thread()函数,另一种基于th ...
- 【跟我一起学Python吧】Python 多线程
其实自我感觉Python的多线程很类似于Java的多线程机制,但是比JAVA的多线程更灵活.在早期的Python多线程实现中,采用了thread模块.例如: from time import ctim ...
- 关于python多线程编程中join()和setDaemon()的一点儿探究
关于python多线程编程中join()和setDaemon()的用法,这两天我看网上的资料看得头晕脑涨也没看懂,干脆就做一个实验来看看吧. 首先是编写实验的基础代码,创建一个名为MyThread的 ...
随机推荐
- SQL Server 主键及自增长列的修改
一.对主键的修改 主键值都会带有主键约束,当执行update操作或是其他操作的时候就会受到限制无法修改,解决的方法是:取消主键约束->删掉主键列->插入修改后的主键值. (1)取消主键约束 ...
- maven作用
1.控制项目间依赖关系方案 A项目依赖B项目的某些功能.将B项目打包为jar,并在A项目的Library下导入B的jar文件. 这样做有着很明显的缺点: 1.如果在开发过程中,发现B中的 ...
- 自动化扫描src漏洞
首先介绍一下常见的漏洞类型: 漏洞自动扫描思路: 常见的一些github上常用的漏洞采集工具,我们可以利用一款工具进行接口调用直接进行利用 自动化工具的雏形:
- luogu1706全排列
#include<bits/stdc++.h> using namespace std; +]; +]; int search(int k); int print(); int n,num ...
- python修炼第六天
越来越难了....现在啥也不想说了,撸起袖子干. 1 面向对象 先来个例子: 比如人狗大战需要有狗,人所以创建两个类别模子def Person(name,sex,hp,dps): dic = {&qu ...
- 数独游戏 js
规则:玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字:保证每一行,每一列,每个宫的数字刚好含1-9,并且不重复. 一.步骤: 生成格子 —— 生成9×9满足规则的数字 —— 置空一定 ...
- 通用c程序Makefile
#一个通用的Makefile,可以在linux各大平台下通用编译c程序,这个版本在gcc平台下实现,如需要课更改第二部的gcc,也可以在第三部添加所需要的库,如有错误,欢迎即使纠正 #1.遵循可移植操 ...
- 非关系统型数据库-mangodb
第三十六课 非关系统型数据库-mangodb 目录 二十四 mongodb介绍 二十五 mongodb安装 二十六 连接mongodb 二十七 mongodb用户管理 二十八 mongodb创建集合. ...
- 非关系数据库一Memcached
第三十四课 非关系数据库一Memcached 目录 一.nosql介绍 二.memrcached介绍 三.安装memcached 四.查看memcachedq状态 五.memcached命令行 六.m ...
- 页面制作学习笔记:D1.概述
一.Web发展历史 Web1.0 :早期HTML页面:例:网易的门户网站163.com. Web2.0:AJAX技术规模应用:例:网易邮箱126.com. Web3.0:HTML5技术规模应用:例:网 ...