python之线程相关操作(补充)
2019-01-15 07:05:45来源:博客园 阅读 ()
1 线程的其他方法
import threading import time from threading import Thread, current_thread def f1(n): time.sleep(1) print('子线程名称', current_thread().getName()) print('子线程id', current_thread().ident) print('%s号线程任务' % n) if __name__ == '__main__': t1 = Thread(target=f1, args=(1,)) t1.start() t2 = Thread(target=f1, args=(1,)) t2.start() print('主线程名称', current_thread().getName()) print('主线程id', current_thread().ident) print(current_thread()) # 当前线程对象 print(threading.enumerate()) # 当前正在运行的线程对象的一个列表 print(threading.active_count()) # 当前正在运行的线程数量
2 线程队列
首先导入模块 import queue
先进先出队列:queue.Queue(3)
先进后出\后进先出队列:queue.LifoQueue(3)
优先级队列:queue.priorityQueue(3)
其中都是相同的方法
import queue # # 先进先出队列 # q = queue.Queue(3) # q.put(1) # q.put(2) # print('当前长度', q.qsize()) # print('是否满了', q.full()) # q.put(3) # print('是否满了', q.full()) # try: # q.put_nowait(5) # except Exception: # print('满了') # print(q.get()) # print(q.get()) # print('是否空了', q.empty()) # print(q.get()) # print('是否空了', q.empty()) # try: # print(q.get_nowait()) # except Exception: # print('空了') # # 先进后出队列, 类似于栈 # q = queue.LifoQueue(3) # q.put(1) # q.put(2) # q.put(3) # # print(q.get()) # print(q.get()) # print(q.get()) # ''' # 3 # 2 # 1 # ''' # 优先级队列 q = queue.PriorityQueue(7) q.put((6, 'today')) # 存放一个元组, 第一个元素是优先级, 越小优先级越高 q.put((-3, 'yesterday')) q.put((5, 'tomorrow')) q.put((12, 12)) q.put((5, 'July')) q.put((7,23)) q.put((7,123)) print(q.get()) print(q.get()) print(q.get()) print(q.get()) print(q.get()) print(q.get()) print(q.get()) ''' (-3, 'yesterday') (5, 'July') (5, 'tomorrow') (6, 'today') (7, 23) (7, 123) (12, 12) '''
3 线程池
首先导入
From concurrent_futures import ThreadPoolExecutor,ProcessPoolExecutor
import time from threading import current_thread from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor def f1(n,s): time.sleep(1) # print('%s号子线程'%current_thread().ident) # print(n,s) return if __name__ == '__main__': tp = ThreadPoolExecutor(4) # tp = ProcessPoolExecutor(4) # tp.map(f1,range(10)) #异步提交任务,参数同样是任务名称,可迭代对象 res_list = [] for i in range(10): res = tp.submit(f1,i,'baobao') #submit是给线程池异步提交任务, print(res) # res.result() res_list.append(res) # for r in res_list: # print(r.result()) tp.shutdown() #主线程等待所有提交给线程池的任务,全部执行完毕 close + join for r in res_list: print(r.result()) # 和get方法一样,如果没有结果,会等待,阻塞程序 print('主线程结束')
线程池回调函数:
from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor def f1(n, n1): return n + n1 def f2(n): print(n) # <Future at 0x25bc198 state=finished returned int> print('这里是回调函数:', n.result()) # 这里是回调函数: 23 if __name__ == '__main__': tp = ThreadPoolExecutor(4) res = tp.submit(f1, 11,12).add_done_callback(f2)
原文链接:https://www.cnblogs.com/q455674496/p/10267057.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- python3基础之“术语表(2)” 2019-08-13
- python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等 2019-08-13
- Python3安装impala 2019-08-13
- 小白如何入门 Python 爬虫? 2019-08-13
- python_字符串方法 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash