python高级编程——线程和线程池
# 1、创建Thread类实例,传给它一个函数
# 线程的属性和方法
def task(task_id, task_time):
print("start task", task_id, "at", ctime())
sleep(task_time)
print("task", task_id, "done at", ctime()) if __name__ == "__main__":
print("准备创建线程")
# 创建Thread类实例,传给它一个函数,传参也是关键字参数
t = threading.Thread(target=task, args=(1, 2))
print("准备启动线程")
# 两种设置守护线程的方式,
# 守护线程和守护进程就是主进程运行完,守护进(线)程立刻结束
# t.setDaemon(True)
t.daemon = True
t.start()
# 名字以Thread-N起名,N从1开始
print("线程的名字:", t.name)
print("线程的id:", t.ident)
print("线程已经启动")
# 2、创建Thread的实例,传给他一个可调用的类的实例化对象
# 重写方法__call__
def task(task_id, task_time):
print("start task", task_id, "at", ctime())
sleep(task_time)
print("task", task_id, "done at", ctime()) # 创建一个简单的类
class ThreadFunc(object):
def __init__(self, *args):
super().__init__()
self.args = args # __call__功能是使得实例化对象也可以调用
def __call__(self, *args, **kwargs):
task(*self.args) if __name__ == "__main__":
t = threading.Thread(target=ThreadFunc(1, 2))
t.start()
t.join()
③派生Thread的子类,并创建子类的实例(推荐)
# 3、派生Thread的子类,并创建子类的实例(推荐)
def task(task_id, task_time):
print("start task", task_id, "at", ctime())
sleep(task_time)
print("task", task_id, "done at", ctime()) class MyThread(threading.Thread):
def __init__(self, *args):
super().__init__()
self.args = args def run(self):
task(*self.args) if __name__ == "__main__":
myThread = MyThread(1, 2)
# 这里不是调用run方法,和进程的使用差别不大
myThread.start()
myThread.join()

总结:在一个进程的多个线程是可以共享进程的全局变量的,但是多个线程若同时修改这个全局变量,就可能造成多个线程之间对全局变量的混乱(即线程是不安全的)下一篇就是就要讲到锁机制了。
python高级编程——线程和线程池的更多相关文章
- python高级编程——进程和进程池
python提供了一个跨平台的多进程支持——multiprocessing模块,其包含Process类来代表一个进程对象 1.Process语法结构:(注: 传参的时候一定使用关键字传参) 2.自定义 ...
- 第十章:Python高级编程-多线程、多进程和线程池编程
第十章:Python高级编程-多线程.多进程和线程池编程 Python3高级核心技术97讲 笔记 目录 第十章:Python高级编程-多线程.多进程和线程池编程 10.1 Python中的GIL 10 ...
- (九) 一起学 Unix 环境高级编程 (APUE) 之 线程
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
- (十) 一起学 Unix 环境高级编程 (APUE) 之 线程控制
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
- python高级编程技巧
由python高级编程处学习 http://blog.sina.com.cn/s/blog_a89e19440101fb28.html Python列表解析语法[]和生成 器()语法类似 [expr ...
- 第九章:Python高级编程-Python socket编程
第九章:Python高级编程-Python socket编程 Python3高级核心技术97讲 笔记 9.1 弄懂HTTP.Socket.TCP这几个概念 Socket为我们封装好了协议 9.2 cl ...
- 第十一章:Python高级编程-协程和异步IO
第十一章:Python高级编程-协程和异步IO Python3高级核心技术97讲 笔记 目录 第十一章:Python高级编程-协程和异步IO 11.1 并发.并行.同步.异步.阻塞.非阻塞 11.2 ...
- python高级编程:有用的设计模式3
# -*- coding: utf-8 -*-__author__ = 'Administrator'#python高级编程:有用的设计模式#访问者:有助于将算法从数据结构中分离出来"&qu ...
- python高级编程:有用的设计模式2
# -*- coding: utf-8 -*- __author__ = 'Administrator' #python高级编程:有用的设计模式 #代理 """ 代理对一 ...
- python高级编程:有用的设计模式1
# -*- coding: utf-8 -*-__author__ = 'Administrator'#python高级编程:有用的设计模式#设计械是可复用的,某种程序上它对软件设计中觉问题提供的语言 ...
随机推荐
- echarts-中的事件-- demo1.on('事件类型', function (params) {}
ECharts 支持常规的鼠标事件类型,包括 'click'.'dblclick'.'mousedown'.'mousemove'. 'mouseup'.'mouseover'.'mouseout'. ...
- 201871010134-周英杰《面向对象程序设计(java)》第七周学习总结
201871010134-周英杰<面向对象程序设计(java)>第七周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这 ...
- 【使用篇二】SpringBoot整合mybatis(7)
说明:使用SpringBoot+Mybatis+Jsp实现简单的用户增删查改 #用户表 DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `) NO ...
- nodejs接收post请求参数
原文 https://blog.csdn.net/u013263917/article/details/78682270#1.2 nodejs接收post请求参数1.1-浏览器发送post请求参数的方 ...
- 在树莓派上配置MariaDB
在树莓派上配置MariaDB 前言 MariaDB是由原本开发MySQL的一些原始开发者领导,他们担心Oracle收购MySQL后会有一些隐患.MariaDB与MySQL保持这高度兼容性,并使用了一个 ...
- [LeetCode] 829. Consecutive Numbers Sum 连续数字之和
Given a positive integer N, how many ways can we write it as a sum of consecutive positive integers? ...
- css盲点
以下纯属个人知识扫盲,记录下笔记 1.子元素设置display:inline-block时,彼此之间会出现一条细小的缝隙,解决办法:父元素设置font-size:0:就可消除缝隙了 2.能不用动画就不 ...
- 基于opencv+python的二维码识别
花了2天时间终于把二维码识别做出来了,不过效果一般,后面会应用在ROS辅助定位上,废话少说先上图: 具体过程参考了这位大神的博客:http://blog.csdn.net/qq_25491201/ar ...
- HTTP之如何控制缓存
HTTP控制缓存的能力 ===================摘自<HTTP权威指南>==================================== 服务器可以通过HTTP定义的 ...
- 【Oracle】重做undo表空间
重做undo表空间 场景: alert日志,报了如下错误: [oraprod@arpinfo bdump]$ tail -f alert_PROD.log Errors in file /ora115 ...