📜  python 线程与多处理 - Python (1)

📅  最后修改于: 2023-12-03 15:19:11.288000             🧑  作者: Mango

Python 线程与多处理

Python是一种高级编程语言,提供了多种处理并行任务的方法。其中包括线程和多处理(multiprocessing)。

线程

线程是轻量级的执行单元,可以在一个进程内同时执行多个线程。Python标准库提供了threading模块来实现线程功能。

创建线程

创建一个线程需要实例化Thread类,并传入一个函数作为线程执行的主体。以下是创建一个简单线程的示例:

import threading

def worker():
    print('Thread running')

t = threading.Thread(target=worker)
t.start()

上述代码创建了一个名为worker的函数,并将其作为Thread类的target参数传入。调用start()方法后,线程开始执行。预期输出为Thread running

传递参数

可以使用args参数在创建线程时传递参数。以下示例展示了如何将参数传递给线程:

import threading

def worker(num):
    print(f'Thread-{num} running')

t = threading.Thread(target=worker, args=(1,))
t.start()

上述代码创建了一个名为worker的函数,并将1作为参数传递给它。在Thread的初始化中,参数1被传递给了args参数。预期输出为Thread-1 running

多处理

Python提供了另一种实现并行处理的方法:多处理(multiprocessing)。多处理是通过在不同的进程中执行任务来利用多核处理器的能力。

创建进程

与创建线程类似,创建进程需要实例化一个Process类,并传入一个函数作为进程执行的主体。以下是创建进程的示例:

import multiprocessing

def worker():
    print('Process running')

p = multiprocessing.Process(target=worker)
p.start()

上述代码创建了一个名为worker的函数,并将其作为Process类的target参数传入。调用start()方法后,进程开始执行。预期输出为Process running

传递参数

多处理中也可以使用args参数在创建进程时传递参数。以下示例展示了如何将参数传递给进程:

import multiprocessing

def worker(num):
    print(f'Process-{num} running')

p = multiprocessing.Process(target=worker, args=(1,))
p.start()

上述代码创建了一个名为worker的函数,并将1作为参数传递给它。在Process的初始化中,参数1被传递给了args参数。预期输出为Process-1 running

进程间通信

由于多处理中的进程是独立的,它们之间不能共享数据,必须使用进程间通信(Inter Process Communication, IPC)来实现数据共享。Python提供了多种IPC机制,包括队列(Queue)、管道(Pipe)和共享内存(Shared Memory)等。

以下是使用队列实现多进程通信的示例:

import multiprocessing

def worker(queue):
    queue.put('Message from worker')

queue = multiprocessing.Queue()
p = multiprocessing.Process(target=worker, args=(queue,))
p.start()
print(queue.get())

上述代码创建了一个队列,并将其作为参数传递给了进程。在进程内使用queue.put()向队列中放置一条消息,并使用queue.get()在主进程中获取该消息。预期输出为Message from worker

以上是Python线程与多处理的简单介绍,希望对您有所帮助。