【python学习】基础篇-常用模块-multiprocessing模块:多种进程间通信

multiprocessing模块提供了多种进程间通信方式,以下是一些常用的方法:

1、Queue: 创建一个队列对象,用于在进程之间传递数据。可以设置队列的最大长度和阻塞时间等选项。

from multiprocessing import Process, Queue

def worker(q):
    q.put('hello')

if __name__ == '__main__':
    q = Queue()
    p = Process(target=worker, args=(q,))
    p.start()
    p.join()
    print(q.get())

2、Pipe: 创建一个管道对象,用于在进程之间传递数据。可以设置管道的缓冲区大小等选项。

from multiprocessing import Process, Pipe

def worker(conn):
    conn.send('hello')
    conn.close()

if __name__ == '__main__':
    parent_conn, child_conn = Pipe()
    p = Process(target=worker, args=(child_conn,))
    p.start()
    p.join()
    print(parent_conn.recv())

3、Value和Array: 创建共享变量或数组对象,可以在进程之间共享数据。可以设置共享变量或数组的初始值、类型和大小等选项。

from multiprocessing import Process, Value, Array
import ctypes

def worker(n, a):
    n.value = 3.1415926
    for i in range(len(a)):
        a[i] = ctypes.c_double(a[i])

if __name__ == '__main__':
    num = Value('d', 0.0)
    arr = Array('d', [1.0, 2.0, 3.0])
    p = Process(target=worker, args=(num, arr))
    p.start()
    p.join()
    print(num.value)
    print(arr[:])

4、Lock和RLock: 创建锁对象,用于保护共享资源的访问。可以设置锁的超时时间等选项。

from multiprocessing import Process, Lock, RLock
import time

def worker(lock, num):
    lock.acquire()
    try:
        time.sleep(1)
    finally:
        lock.release()
        num.value += 1

if __name__ == '__main__':
    num = Value('i', 0)
    lock = Lock()
    p = Process(target=worker, args=(lock, num))
    p.start()
    p.join()
    print(num.value)

5、Event和Barrier: 创建事件对象和障碍对象,用于协调多个进程的执行。可以设置事件和障碍的等待时间等选项。

from multiprocessing import Process, Event, Barrier
import time

def worker(event, barrier):
    event.wait()
    print('Worker')
    barrier.wait()
    print('Barrier')

if __name__ == '__main__':
    event = Event()
    barrier = Barrier(3)
    p1 = Process(target=worker, args=(event, barrier))
    p2 = Process(target=worker, args=(event, barrier))
    p3 = Process(target=worker, args=(event, barrier))
    p1.start()
    p2.start()
    p3.start()
    event.set()
    p1.join()
    p2.join()
    p3.join()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 下面是一个使用python `multiprocessing` 模块实现多进程的示例代码: ``` import multiprocessing def worker(number): print(f'Worker {number} is running') if __name__ == '__main__': for i in range(5): p = multiprocessing.Process(target=worker, args=(i,)) p.start() ``` 这段代码创建了5个进程,每个进程都执行`worker`函数,并打印出进程编号。 ### 回答2: 下面是一个使用Python multiprocessing模块实现多进程的示例代码: ```python import multiprocessing def worker(name): print(f'Worker {name} 执行') if __name__ == '__main__': processes = [] for i in range(5): p = multiprocessing.Process(target=worker, args=(i,)) processes.append(p) p.start() for p in processes: p.join() ``` 以上代码创建了5个进程,并通过worker函数在每个进程中执行一些任务。在主程序的主函数中,先创建一个进程列表用于存储即将被创建的进程对象。 在for循环中,通过multiprocessing.Process类创建一个进程对象,将要执行的任务指定为worker函数,并传递一个参数i给worker函数。然后将新创建的进程对象添加到进程列表中。 接着,使用p.start()启动每个进程。 最后,使用p.join()等待每个进程执行完毕,确保所有进程都执行完毕后再继续主程序的执行。 运行以上代码,你会看到五个进程同时被创建并执行,不同进程之间的输出顺序可能会有不同。 ### 回答3: 多进程可以通过Pythonmultiprocessing模块来实现。下面是一个使用Python multiprocessing模块实现多进程的示例代码: ```python import multiprocessing def worker(num): """Worker function""" print(f'Worker {num} started') # do some work print(f'Worker {num} finished') if __name__ == '__main__': # 创建多个进程 processes = [] for i in range(5): p = multiprocessing.Process(target=worker, args=(i,)) processes.append(p) p.start() # 等待进程结束 for process in processes: process.join() ``` 在上述代码中,我们首先定义了worker函数作为每个进程要执行的任务。然后,在主程序中使用for循环创建了5个进程,并将它们存储在一个列表中。每个进程都使用multiprocessing.Process类创建,并指定了要执行的目标函数和传递给它的参数。然后,我们通过调用start()方法来启动每个进程。 在所有进程都启动后,我们通过调用join()方法来等待每个进程的结束。这样可以确保主程序在所有子进程执行完毕之前不会退出。 运行上面的代码,你会看到每个进程都会输出"Worker x started"和"Worker x finished"的信息,其中x是进程的编号。 使用Pythonmultiprocessing模块可以帮助我们实现多进程编程,从而在计算机上同时执行多个任务,提高程序的运行效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值