Python 是一门支持多线程操作的语言,多线程操作可以提高代码的执行效率,而且在处理多任务的情况下也比较常用。下面是 Python 实现多线程的方式及多条命令并发执行的完整攻略。
Python 实现多线程的方式
Python 实现多线程通常有以下三种方式:
1. 使用 _thread 模块实现多线程
使用 _thread 模块实现多线程需要注意的事项:
- 线程函数必须以单个参数作为输入,该参数是一个元组;
- 在创建线程之前,先导入 _thread 模块;
- 如果主线程退出,则子线程也会退出。
示例代码:
import _thread
import time
# 定义线程函数
def print_time(threadName, delay):
count = 0
while count < 5:
time.sleep(delay)
count += 1
print ("%s: %s" % ( threadName, time.ctime(time.time()) ))
# 创建两个线程
try:
_thread.start_new_thread( print_time("_thread-1", 2, ) )
_thread.start_new_thread( print_time("_thread-2", 4, ) )
except:
print ("Error: 无法启动线程")
while 1:
pass
2. 使用 threading 模块实现多线程
使用 threading 模块实现多线程需要注意的事项:
- 需要继承 threading.Thread 类来创建线程;
- 重写 init() 和 run() 方法以定义线程行为;
- start() 函数用于启动新的线程;
- join() 函数用于等待线程终止。
示例代码:
import threading
import time
# 定义线程类
class myThread (threading.Thread):
def __init__(self, threadID, name, delay):
threading.Thread.__init__(self)
self.threadID = threadID
self.name = name
self.delay = delay
def run(self):
print ("开始线程:" + self.name)
print_time(self.name, self.delay)
print ("结束线程:" + self.name)
# 定义线程函数
def print_time(threadName, delay):
count = 0
while count < 5:
time.sleep(delay)
count += 1
print ("%s: %s" % ( threadName, time.ctime(time.time()) ))
# 创建两个线程
thread1 = myThread(1, "Thread-1", 2)
thread2 = myThread(2, "Thread-2", 4)
# 启动线程
thread1.start()
thread2.start()
# 等待线程终止
thread1.join()
thread2.join()
print ("退出主线程")
3. 使用 concurrent.futures 模块实现多线程
concurrent.futures 模块将创建和管理线程池的复杂性封装在高层级的 abstractions 中,其中包括 ThreadPoolExecutor 和 ProcessPoolExecutor。使用该模块实现多线程需要注意的事项:
- 首先导入 concurrent.futures 模块;
- 创建 Executor 对象(ThreadPoolExecutor 或 ProcessPoolExecutor);
- 调用 Executor 对象的 submit() 方法来提交可调用对象以并发执行;
- 获取结果(需要通过 Future 对象获取)。
示例代码:
import concurrent.futures
import time
# 定义任务函数
def task(delay: int):
print(f'start task at {time.ctime()}')
time.sleep(delay)
print(f'end task at {time.ctime()}')
return 'task done'
# 创建 Executor 对象
executor = concurrent.futures.ThreadPoolExecutor(max_workers=2)
# 调用 submit() 方法并发执行任务函数
task1 = executor.submit(task, 3)
task2 = executor.submit(task, 5)
# 获取结果
print(task1.result())
print(task2.result())
Python 多条命令并发执行
Python 实现多条命令并发执行的方法主要有以下两种:
1. 使用 os.system() 函数执行命令
使用 os.system() 函数执行命令可以实现多条命令并发执行,需要注意的事项:
- 使用 & 符号实现多条命令的并发执行;
- 该方法不依赖于操作系统平台。
示例代码:
import os
# 使用 os.system() 函数并发执行多条命令
os.system('echo hello & echo world & echo python')
2. 使用 subprocess 模块执行命令
使用 subprocess 模块执行命令可以实现多条命令并发执行,需要注意的事项:
- 通过创建 Popen 对象来执行命令,可以设置 shell=True 实现命令的并发执行;
- 该方法是跨平台兼容的。
示例代码:
import subprocess
# 使用 subprocess 模块并发执行多条命令
subprocess.Popen('echo hello; echo world; echo python', shell=True)
以上就是 Python 实现多线程的方式及多条命令并发执行的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python实现多线程的方式及多条命令并发执行 - Python技术站