📅  最后修改于: 2023-12-03 15:19:11.288000             🧑  作者: Mango
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线程与多处理的简单介绍,希望对您有所帮助。