Skip to main content

Python 入门基础知识 - 多线程编程

Python 入门基础知识 - 多线程编程

多线程编程

进程是操作系统中应用程序的执行实例,而线程是进程内部的一个执行单元。当系统创建一个进程后,也就创建了一个主线程。每个进程至少有一个线程,

也可以有多个线程。在程序中使用多线程可以实现并行处理,充分利用CPU。Python提供了对多线程的支持。在Python中可以方便的使用多线程进行编程。

线程基础

Python提供了thread、threading模块对多线程编程的支持。threading模块是对thread模块的封装。多数情况下使用threading模块来进行多线程编程。

创建编程

在Python中可以通过使用thread模块中的函数,或者通过继承threading类来创建线程。编程创建后还可以对其进行操作。

1,使用thread模块创建线程

thread模块提供了start_new_thread函数,用以创建线程。start_new_thread函数成功创建线程后将返回线程标识。其函数原型如下所示。

其函数含义如下。

function: 在线程中执行的函数名

args: 元组形式的函数列表

kwargs: 可选参数,以字典的形式指定参数

实例演示如下

import thread  # 导入thread函数
import time


def run(n):  # 定义run函数
    for i in range(n):
        print(i)


print(thread.start_new_thread(run, (4,)))  # 使用start_new_thread函数创建线程
print(thread.start_new_thread(run, (2,)))  # 使用start_new_thread函数创建线程
print(thread.start_new_thread(run, (), {'n': 4}))  # 使用字典向函数传递参数

time.sleep(10)  # 防止主线程先于子线程结束而报错

运行代码后输出如下

123145544208384 # 返回线程的标识
0 # 此处为run函数的输出
1
2
3
0
1
123145548414976 # 返回线程的标识
0 # 此处为run函数的输出
1
123145544208384 # 返回线程的标识

可以看到以上输入 每次执行后都会有不同的顺序输出

2,使用threading模块创建线程

通过继承threading模块中的Thread创建新类,重载run方法后,可以通过start方法创建线程。线程创建后将运行run方法。

代码演示如下

import threading


class TestThread(threading.Thread):

    def __init__(self, num):
        threading.Thread.__init__(self)
        self.num = num

    def run(self):
        print('I am ' + str(self.num))


t1 = TestThread(1)
t2 = TestThread(2)
t3 = TestThread(3)
t1.start()
t2.start()
t3.start()

运行代码后输出如下

I am 1
I am 2
I am 3

除了通过继承threading.Thread创建类以外,还可以通过使用threading.Thread直接在线程中创建函数。

实例演示如下

import threading  # 导入threading模块


def run(x, y):  # 定义run函数
    for i in range(x, y):
        print(i)


t1 = threading.Thread(target=run, args=(15, 20))  # 直接使用Thread附加函数,args为函数参数
t1.start()  # 运行线程
# 运行结果如下
# 15
# 16
# 17
# 18

t2 = threading.Thread(target=run, args=(7, 11))  # 直接使用Thread附加函数,args为函数参数
t2.start()  # 运行线程
# 运行结果如下
# 7
# 8
# 9
# 10

实例环境声明

# _*_ coding: utf-8 -*-
# version 2.7.13
版权声明

版权声明

durban.zhang 创作并维护的 Walkerfree 博客采用 创作共用保留署名-非商业-禁止演绎4.0国际许可证。本文首发于 Walkerfree 博客(http://www.walkerfree.com/),版权所有,侵权必究。本文永久链接:http://www.walkerfree.com/article/74