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

一、概念介绍

Thread 是threading模块中最重要的类之一,可以使用它来创建线程。有两种方式来创建线程:一种是通过继承Thread类,重写它的run方法;另一种是创建一个threading.Thread对象,在它的初始化函数(__init__)中将可调用对象作为参数传入.

Thread模块是比较底层的模块,Threading模块是对Thread做了一些包装的,可以更加方便的被使用。

另外在工作时,有时需要让多条命令并发的执行, 而不是顺序执行。

二、代码样例

#!/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

#!/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)

#!/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程序设计有所帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值