PYTHON之路,线程
关于多任务的理解,
代码要执行,首先得变成机器认识的东西执行,那么需要解释器。那么执行按道理,一段程序在这里就具体来说一段代码的执行吧,我们知道代码的执行是从上至下按顺序执行,那么这里有条件分支结构,循环结构,这里不再说这些结构。当你想让两个任务同时执行即两个函数同时执行,那么就必须用到多线程的技术,否则只会按照函数调用的顺序从上至下按顺序执行,一个函数执行完了,才会跑下一个函数。所以采用多线程技术。以下为一个多线程的代码例子,步骤为导入threading模块,线程与函数绑定,启动线程。这样就完成了同时唱歌跳舞。线程的执行是无序的,就可以看到打印出的结果是无序的唱歌跳舞。
import threading import time def dance():
while True:
print("跳舞")
time.sleep(1) def sing(name,age):
while True:
print("唱歌",age,name)
time.sleep(1)
def main():
threading.Thread(target=dance).start()
threading.Thread(target=sing,kwargs={"name":"卡卡西","age":1000}).start() if __name__ == '__main__':
main()
什么是线程:线程是cpu执行的单位。为了多任务处理而存在,执行顺序无序,互相共享全局变量,主线程要等子线程跑完才会结束(如果设置了守护线程,那么当主线程的代码跑完了,守护线程就会陪葬。当主线程里有两个子线程,一个子线程是守护线程一个不是,此时主线程代码跑完,子线程代码如果没跑完,结果就是仍然要把两个子线程都跑完)
此外,值得一提的是,线程之间的共享全局变量是不安全的,举个栗子。一个线程要开始存钱的任务,一个线程要开始取钱的任务,那么此时如果按照这种机制来说,就会出现问题,可能系统最后不知道你实际到底还有多少钱了。问题出现的根本原因就在于计算机底层的工作原理,在这里就不多说了,简单来说分三步,CPU从内存拿数据,处理完,交还给内存。在这三步的过程中,另一个线程也来的话,显而易见的会出现混乱。
所以,出现了互斥锁,当线程A在处理的时候不让别人掺和进来,问题不久解决了,当然还有一个方法就是等待哟个线程跑完后在进行下一个线程,那这就违背了多线程的初心。所以怎么加锁?见一下代码
import threading
lock = threading.Lock()
num1 = 0
def write1():
global num1
for temp in range(1000000):
lock.acquire()
num1 += 1
lock.release()
print("write1结束")
print(num1) def write2():
global num1
for temp in range(1000000):
lock.acquire()
num1 += 1
lock.release()
print("write2结束")
print(num1) def main():
threading.Thread(target=write1).start()
threading.Thread(target=write2).start() if __name__ == '__main__':
main()
显而易见,这里分三步,首先创建一把锁,然后上锁,最后释放锁。当然释放锁是必然的如果不释放就会造成死锁。这显然是一个BUG。
至此,简单总结完了线程,未尽事宜,请多指点。
PYTHON之路,线程的更多相关文章
- python之路----线程
线程概念的引入背景 进程 程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程.程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本:进程 ...
- Python之路——线程池
1 线程基础 1.1 线程状态 线程有5种状态,状态转换的过程如下图所示: 1.2 线程同步——锁 多线程的优势在于可以同时运行多个任务(至少感觉起来是这样,其实Python中是伪多线程).但是当线程 ...
- python之路 线程、进程、协程、队列、python-memcache、python-redis
一.线程 Threading用于提供线程相关的操作,线程是应用程序中工作的最小单元. #!/usr/bin/env python # -*- coding:utf-8 -*- import threa ...
- python之路--线程的其他方法
一 . current_thread的用法 import threading import time from threading import Thread, current_thread def ...
- Python之路【第七篇】:线程、进程和协程
Python之路[第七篇]:线程.进程和协程 Python线程 Threading用于提供线程相关的操作,线程是应用程序中工作的最小单元. 1 2 3 4 5 6 7 8 9 10 11 12 1 ...
- Python之路(第四十六篇)多种方法实现python线程池(threadpool模块\multiprocessing.dummy模块\concurrent.futures模块)
一.线程池 很久(python2.6)之前python没有官方的线程池模块,只有第三方的threadpool模块, 之后再python2.6加入了multiprocessing.dummy 作为可以使 ...
- Python之路,Day9, 进程、线程、协程篇
本节内容 操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者 ...
- Python之路,进程、线程、协程篇
本节内容 进程.与线程区别 cpu运行原理 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者 ...
- python之路 目录
目录 python python_基础总结1 python由来 字符编码 注释 pyc文件 python变量 导入模块 获取用户输入 流程控制if while python 基础2 编码转换 pych ...
- Python之路【第六篇】:socket
Python之路[第六篇]:socket Socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字&quo ...
随机推荐
- CodeForces - 1101B
题目: B. Accordion time limit per test 3 seconds memory limit per test 256 megabytes input standard in ...
- 简要log4j配置
若排版紊乱可查看我的个人博客原文地址 1. 配置效果 下面的log4j日志配置最终能达到的效果是对于全局日志可以根据级别输入到对应级别的日志文件中,注意低级别的日志文件会同时包含高级别的日志信息,例如 ...
- oralce定时任务
oracle定时任务(dbms_job) author:skate time:2007-09-12 http://publish.it168.com/2006/0311/20060311017002. ...
- elasticsearch5.0以上版本及head插件的安装
本文转载至:https://www.cnblogs.com/hts-technology/p/8477258.html(针对5.0以上版本) 对于es5.0以下的版本可以参考:https://www. ...
- 有关Java字符集编码的问题
在Java语言中,下列关于字符集编码(Character set encoding)和国际化(i18n)的问题,哪些是正确的? A.每个中文字符占用2个字节,每个英文字符占用1个字节 B.假设数据库中 ...
- 在IDEA中以TDD的方式对String类和Arrays类进行学习
要求 测试相关方法的正常,错误和边界情况 String类 charAt split Arrays类 sort binarySearch 提交运行结果截图和码云代码链接,截图没有水印的需要单独找老师验收 ...
- float样式的使用
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 「LuoguP1280」尼克的任务
LuoguP1280尼克的任务 : 线性dp 题目描述 尼克每天上班之前都连接上英特网,接收他的上司发来的邮件,这些邮件包含了尼克主管的部门当天要完成的全部任务,每个任务由一个开始时刻与一个持续时间构 ...
- git 安装配置
一.下载安装Git 1.下载Git 官方地址为:https://git-scm.com/download/win 2.下载完之后,双击安装 3.选择安装目录 4.选择组件 5.开始菜单目录名设置 6 ...
- Hive的初识
Hive是构建于Hadoop上的数据仓库基础框架,它提供了以下功能: 可通过SQL轻松的访问数据,从而实现数据仓库的任务.如提取/转换/加载,报告和数据分析. 对各种数据格式施加结构. 访问存储在HD ...