1 线程的其他方法

  1. import threading
  2. import time
  3. from threading import Thread, current_thread
  4.  
  5. def f1(n):
  6. time.sleep(1)
  7. print('子线程名称', current_thread().getName())
  8. print('子线程id', current_thread().ident)
  9. print('%s号线程任务' % n)
  10.  
  11. if __name__ == '__main__':
  12. t1 = Thread(target=f1, args=(1,))
  13. t1.start()
  14. t2 = Thread(target=f1, args=(1,))
  15. t2.start()
  16. print('主线程名称', current_thread().getName())
  17. print('主线程id', current_thread().ident)
  18. print(current_thread()) # 当前线程对象
  19. print(threading.enumerate()) # 当前正在运行的线程对象的一个列表
  20. print(threading.active_count()) # 当前正在运行的线程数量

2 线程队列

首先导入模块 import queue

先进先出队列:queue.Queue(3)

先进后出\后进先出队列:queue.LifoQueue(3)

优先级队列:queue.priorityQueue(3)

其中都是相同的方法

  1. import queue
  2.  
  3. # # 先进先出队列
  4. # q = queue.Queue(3)
  5. # q.put(1)
  6. # q.put(2)
  7. # print('当前长度', q.qsize())
  8. # print('是否满了', q.full())
  9. # q.put(3)
  10. # print('是否满了', q.full())
  11. # try:
  12. # q.put_nowait(5)
  13. # except Exception:
  14. # print('满了')
  15. # print(q.get())
  16. # print(q.get())
  17. # print('是否空了', q.empty())
  18. # print(q.get())
  19. # print('是否空了', q.empty())
  20. # try:
  21. # print(q.get_nowait())
  22. # except Exception:
  23. # print('空了')
  24.  
  25. # # 先进后出队列, 类似于栈
  26. # q = queue.LifoQueue(3)
  27. # q.put(1)
  28. # q.put(2)
  29. # q.put(3)
  30. #
  31. # print(q.get())
  32. # print(q.get())
  33. # print(q.get())
  34. # '''
  35. #
  36. #
  37. #
  38. # '''
  39.  
  40. # 优先级队列
  41. q = queue.PriorityQueue(7)
  42. q.put((6, 'today')) # 存放一个元组, 第一个元素是优先级, 越小优先级越高
  43. q.put((-3, 'yesterday'))
  44. q.put((5, 'tomorrow'))
  45. q.put((12, 12))
  46. q.put((5, 'July'))
  47. q.put((7,23))
  48. q.put((7,123))
  49.  
  50. print(q.get())
  51. print(q.get())
  52. print(q.get())
  53. print(q.get())
  54. print(q.get())
  55. print(q.get())
  56. print(q.get())
  57. '''
  58. (-3, 'yesterday')
  59. (5, 'July')
  60. (5, 'tomorrow')
  61. (6, 'today')
  62. (7, 23)
  63. (7, 123)
  64. (12, 12)
  65. '''

3 线程池

首先导入

From concurrent_futures import ThreadPoolExecutor,ProcessPoolExecutor

  1. import time
  2. from threading import current_thread
  3. from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor
  4.  
  5. def f1(n,s):
  6. time.sleep(1)
  7. # print('%s号子线程'%current_thread().ident)
  8. # print(n,s)
  9. return
  10.  
  11. if __name__ == '__main__':
  12. tp = ThreadPoolExecutor(4)
  13. # tp = ProcessPoolExecutor(4)
  14. # tp.map(f1,range(10)) #异步提交任务,参数同样是任务名称,可迭代对象
  15. res_list = []
  16. for i in range(10):
  17. res = tp.submit(f1,i,'baobao') #submit是给线程池异步提交任务,
  18. print(res)
  19. # res.result()
  20. res_list.append(res)
  21.  
  22. # for r in res_list:
  23. # print(r.result())
  24.  
  25. tp.shutdown() #主线程等待所有提交给线程池的任务,全部执行完毕 close + join
  26. for r in res_list:
  27. print(r.result()) # 和get方法一样,如果没有结果,会等待,阻塞程序
  28. print('主线程结束')

线程池回调函数:

  1. from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor
  2.  
  3. def f1(n, n1):
  4. return n + n1
  5. def f2(n):
  6. print(n) # <Future at 0x25bc198 state=finished returned int>
  7. print('这里是回调函数:', n.result()) # 这里是回调函数: 23
  8.  
  9. if __name__ == '__main__':
  10. tp = ThreadPoolExecutor(4)
  11. res = tp.submit(f1, 11,12).add_done_callback(f2)

python之线程相关操作(补充)的更多相关文章

  1. python之线程相关操作

    1.线程: 一个进程可以有多个线程,共享一个进程的资源: 2.进程线程的区别:  进程是资源分配的最小单位,线程是程序执行的最小单位 3.python中线程模块threading, 提供的类: Thr ...

  2. Python字符串的相关操作

    1.大小写转换 判断字符串 s.isalnum() #所有字符都是数字或者字母 s.isalpha() #所有字符都是字母 s.isdigit() #所有字符都是数字 s.islower() #所有字 ...

  3. Selenium2+python自动化40-cookie相关操作

    前言 虽然cookie相关操作在平常ui自动化中用得少,偶尔也会用到,比如登录有图形验证码,可以通过绕过验证码方式,添加cookie方法登录. 登录后换账号登录时候,也可作为后置条件去删除cookie ...

  4. python文件的相关操作

    python 目录 python 1.python文件的介绍 使用文件的目的 Python文件的类型主要有两种:文本文件和二进制文件. 操作文件的流程主要有三步:打开-操作-关闭操作. 2.文件的打开 ...

  5. python基础之数据类型操作补充,集合及其操作,深浅拷贝

    内容概要: 数据类型操作补充 集合及其操作 深浅拷贝1.基础数据类型补充 1.1字符串的操作补充li = ["李嘉诚", "麻花藤", "黄海峰&qu ...

  6. Selenium2+python自动化40-cookie相关操作【转载】

    前言 虽然cookie相关操作在平常ui自动化中用得少,偶尔也会用到,比如登录有图形验证码,可以通过绕过验证码方式,添加cookie方法登录. 登录后换账号登录时候,也可作为后置条件去删除cookie ...

  7. Python字典及相关操作(内含例题)

    Python字典类型 今天将会介绍一种在python中十分常见的组合数据类型——字典 通过一些实例来理解字典中的常规操作 什么是字典类型? 列表中查找是通过整数的索引(元素在列表中的序号)来实现查找功 ...

  8. python之线程相关的其他方法

    一.join方法 (1)开一个主线程 from threading import Thread,currentThread import time def walk(): print('%s is r ...

  9. Python系统(os)相关操作

    文件操作 python中常用于文件处理的模块有os,shutil等. 1 创建文件 文件的创建可以使用open()函数,如下创建一个test_file.txt的文件: >>> wit ...

随机推荐

  1. Linux - 在当前系统内查找信息的方法

    查找文本 使用grep命令 grep命令 - 示例 grep命令 - 正则表达式 grep命令 - 统计匹配字符串的行数 grep命令 - 搜索多个单词 结合正则表达式使用grep命令 注意:在搜索指 ...

  2. Win10手记-为应用集成SQLite(二)

    接上篇内容,这里给大家分享我的辅助访问类,采用了异步方法,封装了常用的访问操作,一些操作还是纯CLI的. SQLiteDBManager using System; using System.Coll ...

  3. vue moment库格式化处理后端传的日期

    开篇 日期时间格式前端和后端都可以处理,我比较推荐前端来处理(定制化高),下面我就介绍下两种处理的方式 后端处理 django默认不经处理传给前端的日期格式为2018-08-26T19:53:36.5 ...

  4. 【译】使用 ndb 调试 node 应用

    原文链接:Debugging Node.js Application Using ndb Google Chrome 实验室发布了一款新的 node debug 工具来提升开发者体验,本文将会全面介绍 ...

  5. 使用jdk的keytool 生成CA证书的方法

    一.CA证书生成设置总共分为以下5步: 步骤: 1.根据java的keytool生成CA根证书,放在服务器 2.根据服务器CA根证书导出客户端证书 3.tomcat增加SSL配置 4.客户端IE浏览器 ...

  6. Android privilege escalation to mediaserver from zero permissions (CVE-2014-7920 + CVE-2014-7921)

    墙外通道:http://bits-please.blogspot.com/2016/01/android-privilege-escalation-to.html In this blog post ...

  7. 第4章 Selenium2-java WebDriver API (二)

    4.8  定位一组元素 定位一组元素的方法与定位单个元素的方法类似,唯一的区别是在单词element后面多了一个s表示复数.定位一组元素一般用于以下场景: ·批量操作元素,例如勾选页面上所有的复选框. ...

  8. Spark2.1.0——内置Web框架详解

    Spark2.1.0——内置Web框架详解 任何系统都需要提供监控功能,否则在运行期间发生一些异常时,我们将会束手无策.也许有人说,可以增加日志来解决这个问题.日志只能解决你的程序逻辑在运行期的监控, ...

  9. python装饰器带括号和不带括号的语法和用法

    装饰器的写法补充: 通常装饰器的写法是@func(),而有的时候为了减少出错率,可能会写成@func,没有()括号,这时我们可以这样定义,来减少括号.下面通过两个例子还看. 一般装饰器的写法: def ...

  10. HTML XML 介绍

    一. HTML(HyperTextMark-upLanguage)即超文本标记语言,是WWW的描述语言. 二. XML即ExtentsibleMarkup Language(可扩展标记语言), XML ...