欢迎访问宙启技术站
智能推送

Python中的多线程/多进程函数

发布时间:2023-06-09 23:56:20

Python是一种高级编程语言,具有快速开发原型和脚本能力。Python具有内置的多线程和多进程功能,这使得在编写高并发度的程序时变得更加便捷。在这篇文章中,我们将探讨Python中多线程和多进程函数的使用和实现。

多线程

Python中的多线程允许同时执行多个任务。它需要使用Python内置的线程模块。线程模块提供了Thread类,可以用它来创建线程。

创建线程:

要创建线程,我们需要使用Thread类的构造函数。函数的语法如下:

thread = Thread(target=function, args=args)

其中,target是要运行的函数的名称,args是该函数的参数列表。创建线程后,可以使用start()方法启动线程。

例子:

这里是一个简单的多线程示例,包含一个计数器函数和一个打印计数器值的函数。

from threading import Thread

def counter():
    for i in range(10):
        print("count",i)

def printer():
    for i in range(10):
        print("print",i)

thread1 = Thread(target=counter)
thread2 = Thread(target=printer)

thread1.start()
thread2.start()

thread1.join()
thread2.join()

print("done")

在这个例子中,我们定义了两个函数counter()和printer(),然后分别创建了两个线程thread1和thread2。我们在主线程中启动了这两个线程,然后使用join()方法将主线程挂起,等待线程完成。最后,我们打印“done”表示程序已完成运行。

多进程

不同于多线程,多进程是运行于多个独立的进程之中。Python提供了一个内置的多进程模块multiprocessing,使用它可以轻松地创建多个进程来执行任务。multiprocessing模块支持通过使用Process类来创建新的进程。

创建进程:

要创建进程,我们需要使用Process类的构造函数。函数的语法如下:

proc = Process(target=function, args=args)

其中,target是要运行的函数的名称,args是该函数的参数列表。创建进程后,可以使用start()方法启动进程。

例子:

这里是一个简单的多进程示例,包含一个计数器函数和一个打印计数器值的函数。这里我们将函数定义为类的方法,以便可以使用类的属性。

from multiprocessing import Process

class MyProcess():
    def __init__(self):
        self.count = 0

    def counter(self):
        for i in range(10):
            self.count += 1
            print("count",self.count)

    def printer(self):
        for i in range(10):
            print("print",self.count)

if __name__ == "__main__":
    my_proc = MyProcess()

    proc1 = Process(target=my_proc.counter)
    proc2 = Process(target=my_proc.printer)

    proc1.start()
    proc2.start()

    proc1.join()
    proc2.join()

    print("done")

在这个例子中,我们定义了一个类MyProcess,它包含了一个计数器函数和一个打印计数器值的函数。我们实例化了这个类,然后分别创建了两个进程proc1和proc2。我们在主进程中启动了这两个进程,然后使用join()方法将主进程挂起,等待进程完成。最后,我们打印“done”表示程序已完成运行。

总结

Python提供了内置的多线程和多进程函数,这使得编写高并发度的程序变得非常便捷。我们可以使用Thread类和Process类来创建线程和进程,并使用start()方法启动它们。最后,我们使用join()方法将主线程或主进程挂起,等待线程或进程完成,并打印“done”表示程序已完成运行。