线程GIL锁 线程队列 回调函数
----------------------------------无法改变风向,可以调整风帆;无法左右天气,可以调整心情。如果事情无法改变,那就去改变观念。
# # ------------------------------------------------------------------------------------------------------------#
# # --------------[线程队列]-------------- # import queue #先进先出队列
# q = queue.Queue(3) #创建了一个长度为3的队列,也就是说,最多只能放3个数据
#
# q.put(2)
# print('>>>>',q.qsize())
# q.put(5)
# print('>>>>',q.qsize())
# q.put(0)
#
# # q.put(1)
# try:
# q.put_nowait(1)
# except Exception:
# print('队列满了')
# print(q.get())
# print(q.get())
# print(q.get())
# # print(q.get())
# # print(q.get_nowait()) #后进先出,先进后出 # import queue
#
# q = queue.LifoQueue(3)
#
# q.put(1)
# q.put(2)
# q.put(3)
#
# print(q.get())
# print(q.get())
# print(q.get()) # 优先级队列 import queue q = queue.PriorityQueue(5) q.put((3,33)) q.put((1,2))
q.put((1,3))
# q.put((1,(3,2)))
# q.put((1,(1,2))) q.put((2,22))
q.put((4,44)) print(q.get())
print(q.get())
print(q.get())
print(q.get())
print(q.get()) # # --------------[创建线程池]-------------- import time
from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor
from multiprocessing import Pool def func(n):
# print(n)
time.sleep(1)
return n * n if __name__ == '__main__':
# t_p = ThreadPoolExecutor(max_workers=4)
t_p = ProcessPoolExecutor(max_workers=4)
# p_pool = Pool(4)
res_list = [] for i in range(10):
res = t_p.submit(func,i) #异步提交任务
# print(res.result()) #等待任务的执行结果,拿不到就阻塞,拿到了再运行
res_list.append(res) t_p.shutdown() print('主线程结束') for res1 in res_list:
print(res1.result()) # for i in range(10):
# res = p_pool.apply_async(func,args=(i,))
# # print(res)
# print(res.get()) # # --------------[进程池的map方法]-------------- import time
from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor
from multiprocessing import Pool def func(n):
# print(n)
time.sleep(1)
return n * n if __name__ == '__main__':
t_p = ThreadPoolExecutor(max_workers=4)
# t_p = ProcessPoolExecutor(max_workers=4)
# p_pool = Pool(4)
# res_list = [] res = t_p.map(func,range(10)) #
# print(res)
t_p.shutdown() print('主线程结束')
for i in res:
print(i) # print([t1 for t1 in res])
# for i in range(10):
# res = t_p.submit(func,i) #异步提交任务
# # print(res.result()) #等待任务的执行结果,拿不到就阻塞,拿到了再运行
# res_list.append(res)
#
# t_p.shutdown()
#
# print('主线程结束')
#
# for res1 in res_list:
# print(res1.result()) # for i in range(10):
# res = p_pool.apply_async(func,args=(i,))
# # print(res)
# print(res.get()) # # --------------[回调函数]-------------- import time
from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor
from multiprocessing import Pool def func(n):
time.sleep(1)
return n * n def call_back(m):
print('>>>>>',m)
print(m.result()) if __name__ == '__main__':
# t_p = ThreadPoolExecutor(max_workers=4)
t_p = ProcessPoolExecutor(max_workers=4)
p_pool = Pool(4)
res_list = [] res = t_p.submit(func,10).add_done_callback(call_back) # p_pool.apply_async(func,args=(10,),callback=call_back)
# for i in range(10):
# res = p_pool.apply_async(func,args=(i,))
# # print(res)
# print(res.get())
线程GIL锁 线程队列 回调函数的更多相关文章
- day34 GIL锁 线程队列 线程池
一.Gil锁(Global Interpreter Lock) python全局解释器锁,有了这个锁的存在,python解释器在同一时间内只能让一个进程中的一个线程去执行,这样python的多线程就无 ...
- 第三十四天- 线程队列、线程池(map/submit/shutdown/回调函数)
1.线程列队 queue队列 :使用import queue,用法与进程Queue一样 class queue.Queue(maxsize=0) # 先进先出: q = queue.Queue(3) ...
- day33 GIL锁 线程队列 线程池
1. 全局解释器锁GIL Python代码的执行由Python虚拟机(也叫解释器主循环)来控制.Python在设计之初就考虑到要在主循环中,同时只有一个线程在执行.虽然 Python 解释器中可 ...
- GIL锁,线程池
内容梗概: 1.线程队列 2.线程池 3.GIL锁 1.线程队列 1.1先进先出队列(FIFO)import queueq = queue.Queue(3)q.put(1)q.put(2)q.put( ...
- 53_并发编程-线程-GIL锁
一.GIL - 全局解释器锁 有了GIL的存在,同一时刻同一进程中只有一个线程被执行:由于线程不能使用cpu多核,可以开多个进程实现线程的并发,因为每个进程都会含有一个线程,每个进程都有自己的GI ...
- Python并发编程-进程 线程 同步锁 线程死锁和递归锁
进程是最小的资源单位,线程是最小的执行单位 一.进程 进程:就是一个程序在一个数据集上的一次动态执行过程. 进程由三部分组成: 1.程序:我们编写的程序用来描述进程要完成哪些功能以及如何完成 2.数据 ...
- Python3 进程 线程 同步锁 线程死锁和递归锁
进程是最小的资源单位,线程是最小的执行单位 一.进程 进程:就是一个程序在一个数据集上的一次动态执行过程. 进程由三部分组成: 1.程序:我们编写的程序用来描述进程要完成哪些功能以及如何完成 2.数据 ...
- Python 进程线程协程 GIL 闭包 与高阶函数(五)
Python 进程线程协程 GIL 闭包 与高阶函数(五) 1 GIL线程全局锁 线程全局锁(Global Interpreter Lock),即Python为了保证线程安全而采取的独立线程运行的 ...
- 并发编程-线程-死锁现象-GIL全局锁-线程池
一堆锁 死锁现象 (重点) 死锁指的是某个资源被占用后,一直得不到释放,导致其他需要这个资源的线程进入阻塞状态. 产生死锁的情况 对同一把互斥锁加了多次 一个共享资源,要访问必须同时具备多把锁,但是这 ...
随机推荐
- [20180904]工作中一个错误.txt
[20180904]工作中一个错误.txt --//昨天看我提交一份修改建议,发现自己写的sql语句存在错误.--//链接:http://blog.itpub.net/267265/viewspace ...
- 【底层原理】深入理解Cache (上)
存储器是分层次的,离CPU越近的存储器,速度越快,每字节的成本越高,同时容量也因此越小.寄存器速度最快,离CPU最近,成本最高,所以个数容量有限,其次是高速缓存(缓存也是分级,有L1,L2等缓存),再 ...
- 十大经典排序算法的python实现
十种常见排序算法可以分为两大类: 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序.包括:冒泡排序.选择排序.归并排序.快速 ...
- ASP.NET -- WebForm -- 页面生命周期事件
ASP.NET -- WebForm -- 页面生命周期事件在页生命周期的每个阶段中,页将引发可运行您自己的代码进行处理的事件. 1. PreInit: 使用该事件来执行下列操作: 检查 IsPos ...
- 常用Dockerfile举例
FROM ubuntu:14.04 MAINTAINER sss ENV JAVA_HOME /opt/jdk RUN \ echo 'export PATH=$JAVA_HOME/bin:$PATH ...
- PHP语言在中国的发展前景怎么样?
PHP语言在中国的发展前景怎么样? “在互联网泛滥得今天,想要做好这一行业不是那么容易的,然而,互联网编程语言的发展PHP编程语言的出现也是赢了世界发展的潮流. PHP在我国发展也很快,越来越多的编程 ...
- Zend:PHP框架结束的开始?
Zend:PHP框架结束的开始? 随着Zeev Suraski, Matthew Weier O'Phinney, Enrico Zimuel and Dmitry Stogov 这些PHP核心小组的 ...
- UVA225-Golygons(dfs)
Problem UVA225-Golygons Accept:307 Submit:3646 Time Limit: 3000 mSec Problem Description Imagine a ...
- Python 字典方法
访问字典的值 字典中的 键/值 实际上就是一种映射关系,只要知道了 “键”,就肯定知道 “值”. >>> my_dict = dict(name = 'zhangsan',other ...
- 小a的排列
链接:https://ac.nowcoder.com/acm/contest/317/G来源:牛客网 小a有一个长度为nn的排列.定义一段区间是"萌"的,当且仅当把区间中各个数排序 ...