线程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全局锁-线程池
一堆锁 死锁现象 (重点) 死锁指的是某个资源被占用后,一直得不到释放,导致其他需要这个资源的线程进入阻塞状态. 产生死锁的情况 对同一把互斥锁加了多次 一个共享资源,要访问必须同时具备多把锁,但是这 ...
随机推荐
- windows10 专业版的远程服务器管理工具下载
一.安装远程服务器管理工具: 下载地址: https://www.microsoft.com/zh-cn/download/details.aspx?id=45520 二.关闭远程服务器管理工具: 1 ...
- Eclipse引入spring约束详细教程
1.打开eclipse的window-preferences,搜索catalog. 2.点击add,点击File System,弹出页面选择spring-beans-4.2.xsd. 3.key ty ...
- EOS智能合约开发(二):EOS创建和管理钱包
上节介绍了EOS智能合约开发之EOS环境搭建及启动节点 那么,节点启动后我们要做的第一件事儿是什么呢?就是我们首先要有账号,但是有账号的前提是什么呢?倒不是先创建账号,而是先要有自己的一组私钥,有了私 ...
- CentOS 6.5 搭建 .NET 环境, Mono 5.16.0 + Jexus 5.8
最近有这样一个打算,就是准备把以前的有一个.NET 网站部署在Linux 下面,正好试试 .NET 跨平台的功能,为后续研究 .netCore 方向准备. 搭建环境: CentOS 6.5 + Mon ...
- SQL Server的实例恢复解析
同Oracle一样,SQL Server在非一致性关闭的时候也会进行实例恢复(Instance Recovery),本文根据stack overflow的文章介绍一些SQL Server实例恢复的知识 ...
- emacs 绑定快捷键 c/c++
;;跳转到函数定义的地方 (global-set-key (kbd "C-<f2>") 'ggtags-find-definition) ; Control+F2 ;; ...
- [Hive_3] Hive 建表指定分隔符
0. 说明 Hive 建表示例及指定分隔符 1. Hive 建表 Demo 在 Hive 中输入以下命令创建表 user2 create table users2 (id int, name stri ...
- 学习flying logic
之前在知乎上结识的朋友吴笛,他的qq空间里分享了 flying logic的一些用途,我想到可以规划和团队的目标,这点让我感到很兴奋,分享学习这个软件. 学习之前,我应当把软件中的单词学明白.现在就 ...
- 为爱好舞蹈的人们做的软件,细究数据结构,操作系统,磁盘原理,用java/c/c++写一个开源 MP3助手
1.可以给歌曲间插播空白音乐 2.拖拽式调整 3.先排序,后一键写入顺序文件. 国外的开源软件 MP3 播放排序 http://www.murraymoffatt.com/software-prob ...
- win10升级后蓝牙不见了,设备管理器里没有,多了个串行控制器里的未知USB设备?
win10更新后,蓝牙功能不见了,也没有打开的选项,设备管理器里也没有,多了个未知USB设备,重启无效,重装蓝牙驱动无效,BIOS中的Bluetooth是开的. 试了网上能找到的所有方法,包括更新wi ...