python实现多线程的方式及多条命令并发执行

 更新时间:2016年06月07日 10:11:07   投稿:lijiao  
这篇文章主要为大家详细介绍了python实现多线程的方式及多条命令并发执行,感兴趣的小伙伴们可以参考一下

Python客栈送红包、纸质书

一、概念介绍

Thread 是threading模块中最重要的类之一,可以使用它来创建线程。有两种方式来创建线程:一种是通过继承Thread类,重写它的run方法;另一种是创建一个threading.Thread对象,在它的初始化函数(__init__)中将可调用对象作为参数传入.
Thread模块是比较底层的模块,Threading模块是对Thread做了一些包装的,可以更加方便的被使用。
另外在工作时,有时需要让多条命令并发的执行, 而不是顺序执行。

二、代码样例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/usr/bin/python
# encoding=utf-8
# Filename: thread-extends-class.py
# 直接从Thread继承,创建一个新的class,把线程执行的代码放到这个新的 class里
import threading
import time
  
class ThreadImpl(threading.Thread):
 def __init__(self, num):
  threading.Thread.__init__(self)
  self._num = num
  
 def run(self):
  global total, mutex
   
  # 打印线程名
  print threading.currentThread().getName()
  
  for x in xrange(0, int(self._num)):
   # 取得锁
   mutex.acquire()
   total = total + 1
   # 释放锁
   mutex.release()
  
if __name__ == '__main__':
 #定义全局变量
 global total, mutex
 total = 0
 # 创建锁
 mutex = threading.Lock()
  
 #定义线程池
 threads = []
 # 创建线程对象
 for x in xrange(0, 40):
  threads.append(ThreadImpl(100))
 # 启动线程
 for t in threads:
  t.start()
 # 等待子线程结束
 for t in threads:
  t.join()
  
 # 打印执行结果
 print total

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/usr/bin/python
# encoding=utf-8
# Filename: thread-function.py
# 创建线程要执行的函数,把这个函数传递进Thread对象里,让它来执行
 
import threading
import time
  
def threadFunc(num):
 global total, mutex
  
 # 打印线程名
 print threading.currentThread().getName()
  
 for x in xrange(0, int(num)):
  # 取得锁
  mutex.acquire()
  total = total + 1
  # 释放锁
  mutex.release()
  
def main(num):
 #定义全局变量
 global total, mutex
 total = 0
 # 创建锁
 mutex = threading.Lock()
  
 #定义线程池
 threads = []
 # 先创建线程对象
 for x in xrange(0, num):
  threads.append(threading.Thread(target=threadFunc, args=(100,)))
 # 启动所有线程
 for t in threads:
  t.start()
 # 主线程中等待所有子线程退出
 for t in threads:
  t.join()
   
 # 打印执行结果
 print total
  
  
if __name__ == '__main__':
 # 创建40个线程
 main(40)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/usr/bin/python
# encoding=utf-8
# Filename: put_files_hdfs.py
# 让多条命令并发执行,如让多条scp,ftp,hdfs上传命令并发执行,提高程序运行效率
import datetime
import os
import threading
 
def execCmd(cmd):
 try:
  print "命令%s开始运行%s" % (cmd,datetime.datetime.now())
  os.system(cmd)
  print "命令%s结束运行%s" % (cmd,datetime.datetime.now())
 except Exception, e:
  print '%s\t 运行失败,失败原因\r\n%s' % (cmd,e)
 
if __name__ == '__main__':
 # 需要执行的命令列表
 cmds = ['ls /root',
    'pwd',]
  
 #线程池
 threads = []
  
 print "程序开始运行%s" % datetime.datetime.now()
 
 for cmd in cmds:
  th = threading.Thread(target=execCmd, args=(cmd,))
  th.start()
  threads.append(th)
    
 # 等待线程运行完毕
 for th in threads:
  th.join()
    
 print "程序结束运行%s" % datetime.datetime.now()

以上就是本文的全部内容,希望对大家学习python程序设计有所帮助。

蓄力AI

微信公众号搜索 “ 脚本之家 ” ,选择关注

程序猿的那些事、送书等活动等着你

相关文章

  • Python爬虫基础之初次使用scrapy爬虫实例

    Python爬虫基础之初次使用scrapy爬虫实例

    今天给大家带来的是关于Python爬虫的相关知识,文章围绕着Python scrapy展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • python math模块的基本使用教程

    python math模块的基本使用教程

    这篇文章主要介绍了python math模块的基本使用教程,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2021-01-01
  • python3 最常用的三种装饰器语法汇总

    python3 最常用的三种装饰器语法汇总

    这篇文章主要介绍了python3 最常用的三种装饰器语法总结,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • Jupyter notebook命令和编辑模式常用快捷键汇总

    Jupyter notebook命令和编辑模式常用快捷键汇总

    这篇文章主要介绍了Jupyter notebook命令和编辑模式常用快捷键汇总,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • Flask Paginate实现表格分页的使用示例

    Flask Paginate实现表格分页的使用示例

    flask_paginate是Flask框架的一个分页扩展,用于处理分页相关的功能,本文就来介绍一下Flask Paginate实现表格分页的使用示例,感兴趣的可以了解一下
    2023-11-11
  • Python 线程池模块之多线程操作代码

    Python 线程池模块之多线程操作代码

    最近在做一个爬虫相关的项目,单线程的整站爬虫,耗时真的不是一般的巨大,运行一次也是心累,所以,要想实现整站爬虫,多线程是不可避免的,那么python多线程又应该怎样实现呢?今天小编给大家分享下实现代码,感兴趣的朋友一起看看吧
    2021-05-05
  • Python库skimage绘制二值图像代码实例

    Python库skimage绘制二值图像代码实例

    这篇文章主要介绍了Python库skimage绘制二值图像代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • Python命名空间与作用域深入全面详解

    Python命名空间与作用域深入全面详解

    命名空间是从名称到对象的映射,大部分的命名空间都是通过 Python 字典来实现的,作用域就是一个可以直接访问命名空间的正文区域。程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的
    2022-11-11
  • Python基础之标准库和常用的第三方库案例教程

    Python基础之标准库和常用的第三方库案例教程

    这篇文章主要介绍了Python基础之标准库和常用的第三方库案例教程,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • Python Traceback(most recent call last)报错信息:示例解读

    Python Traceback(most recent call last)报错信息:示例解读

    这篇文章主要介绍了Python Traceback(most recent call last)报错信息:示例解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12

最新评论