八周三次课(12月13日) 15.1 多线程实例 15.2 多线程锁
来源:互联网 发布:在淘宝上的原创服饰 编辑:程序博客网 时间:2024/04/29 23:00
八周三次课(12月13日)
15.1 多线程实例
Python中提供了threading模块来对多线程的操作,
多线程实例
线程是应用程序中工作的最小单元。
多线程是现实有两种方式:
方法一:将要执行的方法作为参数传给Thread的构造方法(和多进程类似)
t = threading.Thread(target=action, args=(i,))
方法二:从Thread继承,并重写run()
看源码:
P = threading.Threadp.start() _start_new_thread(self.__bootstrap, ()) self.__bootstrap_inner() self.run() try: if self.__target: self.__target(*self.__args, **self.__kwargs)
所以如果重写了run,就直接调用run的函数了,如果run没有重新,就调用target函数。
示例
import threadingdef worker(n): print("start worker{0}".format(n))class MyThread(threading.Thread): def __init__(self,args): super(MyThread,self).__init__() self.args = args def run(self): print("start MyThread{0}".format(self.args))if __name__ == "__main__": for i in range(1,6): t1 = threading.Thread(target=worker,args=(i,)) t1.start() t1.join() for x in range(6,11): t2 = MyThread(x) t2.start() t2.join()
结果
start worker1start worker2start worker3start worker4start worker5start MyThread6start MyThread7start MyThread8start MyThread9start MyThread10
15.2 多线程锁
通过threading.Lock()来创建锁,函数在执行的只有先要获得锁,左后执行完以后要释放锁:
with lock:lock.acquire()lock.release()
示例
import threadingimport timedef worker(name,lock): with lock: print("start worker {0}".format(name)) time.sleep(2) print("end worker {0}".format(name))if __name__ == "__main__": lock = threading.Lock() t1 = threading.Thread(target=worker,args=("worker1",lock)) t2 = threading.Thread(target=worker,args=("worker2",lock)) t1 .start() t2 .start() print("main end")
阅读全文
0 0
- 八周三次课(12月13日) 15.1 多线程实例 15.2 多线程锁
- 八周四次课(12月14日) 15.3 多线程共享变量 15.4 线程池
- 九周三次课(12月20日) 17.3/17.4 celery多实例 17.5 celery与定时任务
- 二周三次课(10月25日)
- 三周三次课(11月1日)
- 七周五次课(12月8日) 14.1 多进程多线程概念 14.2 多进程 14.3 多进程实例
- 12月13日 数据结构 周三
- 六周三次课(11月22日) 12.8 创建表 12.9/12.10 增加数据 12.11 查询数据
- 八周一次课(12月11日) 14.4 多进程锁 14.5 多进程共享内存
- 八周二次课(12月12日) 14.6 多进程Manager 14.7 进程池
- 12月6日 数据结构 周三
- 12月20日 数据结构 周三
- 八周五次课(12月15日) 16.1 多进程的消息队列 16.2 消息队列pipe
- 二周三次课
- 时间很快的,周三了都(2005年8月31日,周三)
- 五周三次课(11月15日) 11.4 re的matche方法和search方法 11.5 re的split,findall,finditer方法 11.6 re的match对象
- 自己实现多线程 2009年12月25日
- 自动关机&初试多线程(6月28日)
- 什么是Spring Boot
- jQuery ajax
- JS中的数据结构
- 线性回归---公式推导
- DECLARE_SERIAL / IMPLEMENT_SERIAL 宏的技术详解
- 八周三次课(12月13日) 15.1 多线程实例 15.2 多线程锁
- 链家网爬虫
- 内核snprintf的0x300数据访问异常
- 跟随游戏
- 从写项目到部署linux服务器全过程-MyEclipse新建单个Maven web工程
- Mysql之触发器
- spring 集成 spring cloud config 的相关知识
- 逆序数(51nod 1019)
- jquery.snow.js