----------------------------------无法改变风向,可以调整风帆;无法左右天气,可以调整心情。如果事情无法改变,那就去改变观念。

# # ------------------------------------------------------------------------------------------------------------#
# # --------------[线程队列]--------------

# 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锁 线程队列 回调函数的更多相关文章

  1. day34 GIL锁 线程队列 线程池

    一.Gil锁(Global Interpreter Lock) python全局解释器锁,有了这个锁的存在,python解释器在同一时间内只能让一个进程中的一个线程去执行,这样python的多线程就无 ...

  2. 第三十四天- 线程队列、线程池(map/submit/shutdown/回调函数)

    1.线程列队 queue队列 :使用import queue,用法与进程Queue一样 class queue.Queue(maxsize=0) # 先进先出: q = queue.Queue(3) ...

  3. day33 GIL锁 线程队列 线程池

    1.    全局解释器锁GIL Python代码的执行由Python虚拟机(也叫解释器主循环)来控制.Python在设计之初就考虑到要在主循环中,同时只有一个线程在执行.虽然 Python 解释器中可 ...

  4. GIL锁,线程池

    内容梗概: 1.线程队列 2.线程池 3.GIL锁 1.线程队列 1.1先进先出队列(FIFO)import queueq = queue.Queue(3)q.put(1)q.put(2)q.put( ...

  5. 53_并发编程-线程-GIL锁

    一.GIL - 全局解释器锁   有了GIL的存在,同一时刻同一进程中只有一个线程被执行:由于线程不能使用cpu多核,可以开多个进程实现线程的并发,因为每个进程都会含有一个线程,每个进程都有自己的GI ...

  6. Python并发编程-进程 线程 同步锁 线程死锁和递归锁

    进程是最小的资源单位,线程是最小的执行单位 一.进程 进程:就是一个程序在一个数据集上的一次动态执行过程. 进程由三部分组成: 1.程序:我们编写的程序用来描述进程要完成哪些功能以及如何完成 2.数据 ...

  7. Python3 进程 线程 同步锁 线程死锁和递归锁

    进程是最小的资源单位,线程是最小的执行单位 一.进程 进程:就是一个程序在一个数据集上的一次动态执行过程. 进程由三部分组成: 1.程序:我们编写的程序用来描述进程要完成哪些功能以及如何完成 2.数据 ...

  8. Python 进程线程协程 GIL 闭包 与高阶函数(五)

    Python 进程线程协程 GIL 闭包 与高阶函数(五) 1 GIL线程全局锁 ​ 线程全局锁(Global Interpreter Lock),即Python为了保证线程安全而采取的独立线程运行的 ...

  9. 并发编程-线程-死锁现象-GIL全局锁-线程池

    一堆锁 死锁现象 (重点) 死锁指的是某个资源被占用后,一直得不到释放,导致其他需要这个资源的线程进入阻塞状态. 产生死锁的情况 对同一把互斥锁加了多次 一个共享资源,要访问必须同时具备多把锁,但是这 ...

随机推荐

  1. Microsoft Teams 集成 (协作, 沟通 和 行为)

    Microsoft Teams 集成 (协作, 沟通 和 行为) 概述 Microsoft Teams是在Office 365中以chat为中心的工作空间.软件开发团队可以快速获得在一个专门的团队协作 ...

  2. 商家中心FAQ

    1.订购的账号为什么不生成子账号,生成了一个主账号,进店铺里面看子账号也没有 原因:授权失败了,数据库没有生成店铺授权信息 解决方案:重新授权

  3. VS错误:#error 指令: Please use the /MD switch for _AFXDLL builds

    我在做MFC时遇到过这个问题,解决方法如下: 修改设置:工程(Project)-> 属性(Properties)-> 配置属性(Configuration Properties)-> ...

  4. jar、war、ear

    附加jboss里面的application.xml <?xml version=”1.0″ encoding=”UTF-8″?> <application xmlns="h ...

  5. mssql sqlserver 下文分享一种新颖的字符串截取方法

    原文地址:http://www.maomao365.com/?p=7307 摘要:    以前分割字符串时,都使用类似split函数的方式处理,下文分享一种对有规律的字符串的分隔方式,    即:1. ...

  6. Mysql --学习:大量数据快速导入导出

    声明:此文供学习使用,原文:https://blog.csdn.net/xiaobaismiley/article/details/41015783 [实验背景] 项目中需要对数据库中一张表进行重新设 ...

  7. c/c++ const关键字

    const 在星号的右边:不可以改指针的指向,可以用指针改里面的值 int * const p; const在星号的左边:可以改指针的指向,不可以用指针改里面的值 int const *p; cons ...

  8. 聚类——FCM的matlab程序

    聚类——FCM的matlab程序 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 在聚类——FCM文章中已介绍了FCM算法的理论知识,现在用matlab ...

  9. 获取自定义data的几种属性

    //获取data属性的几种方法 var id = this.getAttribute('data-id'); var id = $(this).attr('data-id'); var id = $( ...

  10. 《数据库技术基础与应用(第2版)》学习笔记——第7章~

    从这章开始,操作的内容开始增多,概念的东西越来越少,可能跟学校的教学目的有关,但是跟我的学习目的不匹配,就不再继续整理. 总结:这本书适合大学本科生学习和了解数据库的相关知识以及Access和SQL ...