创建多个进程
import multiprocessing from multiprocessing import Process, Lock import logging import os logger = multiprocessing.log_to_stderr() #打印日志 logger.setLevel(multiprocessing.SUBWARNING) thread_count = 5 def worker(lock,i): lock.acquire() print str(i)+aaa print('module name:', __name__) if hasattr(os, 'getppid'): # only available on Unix print('parent process:', os.getppid()) print('process id:', os.getpid()) logger.warning('doomed') lock.release() if __name__ == '__main__': lock = Lock() for i in range(thread_count): Process(target=worker, args=(lock,i,)).start()
multiprocessing 提供 Queue 与 Pipe两种方式传输数据
#Queue from multiprocessing import Process, Queue def f(q): q.put([42, None, 'hello']) if __name__ == '__main__': q = Queue() p = Process(target=f, args=(q,)) p.start() print(q.get()) # prints "[42, None, 'hello']" p.join() #Pipe from multiprocessing import Process, Pipe def f(conn): conn.send([42, None, 'hello']) conn.close() if __name__ == '__main__': parent_conn, child_conn = Pipe() p = Process(target=f, args=(child_conn,)) p.start() print(parent_conn.recv()) # prints "[42, None, 'hello']" p.join()
共享内存传递数据结果,Value和Array都是线程安全
from multiprocessing import Process, Value, Array def f(n, a): n.value = 3.1415927 for i in range(len(a)): a[i] = -a[i] if __name__ == '__main__': num = Value('d', 0.0) arr = Array('i', range(10)) print(num.value) # 0.0 print(arr[:]) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] p = Process(target=f, args=(num, arr)) p.start() p.join() print(num.value) # 3.1415927 print(arr[:]) # [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
进程池
import multiprocessing import time def do_calculation(data): print(multiprocessing.current_process().name + " " + str(data)) time.sleep(3) return data * 2 def start_process(): print ('Starting', multiprocessing.current_process().name) if __name__ == '__main__': inputs = list(range(10)) print ('Input :' + str(inputs)) pool_size = multiprocessing.cpu_count() pool = multiprocessing.Pool(processes=pool_size, initializer=start_process, ) pool_outputs = pool.map(do_calculation, inputs) pool.close() # no more tasks pool.join() # wrap up current tasks print ('Pool :' + str(pool_outputs))
输出如下
root:~ # python f.py Input :[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] ('Starting', 'PoolWorker-1') PoolWorker-1 0 ('Starting', 'PoolWorker-2') PoolWorker-2 2 PoolWorker-1 1 PoolWorker-2 3 PoolWorker-1 4 PoolWorker-2 6 PoolWorker-1 5 PoolWorker-2 7 PoolWorker-1 8 PoolWorker-1 9 Pool :[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
相关推荐
Python_multiprocessing_6_共享内存_shared_memory_(多进程_多核运算_教学教程tutori
Python multiprocessing.pool创建非守护进程的方法
使用multiprocessing.Manager可以简单地使用这些高级接口。 Manager()返回的manager对象控制了一个server进程,此进程包含的python对象可以被其他的进程通过proxies来访问。从而达到多进程间数据通信且安全。 ...
Python的`multiprocessing`模块是实现多进程编程的关键工具,它允许我们创建并管理多个独立的进程,每个进程都有自己的内存空间。在多进程环境中,数据共享是一个常见需求,但因进程间的内存隔离,直接共享变量是不...
Python_multiprocessing_4_效率对比_multithreading,_multiprocessing_co
Python_multiprocessing_7_lock_锁__(多进程_多核运算_教学教程tutorial)
Python_multiprocessing_3_queue_进程输出_(多进程_多核运算_教学教程tutorial)
Python_multiprocessing_2_创建进程_(多进程_多核运算_教学教程tutorial)
Python的`multiprocessing`模块提供了创建多进程的功能,而`tqdm`库则可以方便地为程序添加进度条,提供友好的用户界面。本文将详细介绍如何结合`multiprocessing`和`tqdm`来实现多进程并显示进度条。 1. **多进程...
Python_multiprocessing_5_进程池_pool_(多进程_多核运算_教学教程tutorial)
python基础_32_Python_multiprocessing_1_什么是多进程_(多进程_多核运算_教学教程tutori
multiprocessing.Pipe([duplex]) 返回2个连接对象(conn1, conn2),代表管道的两端,默认是.../usr/bin/python #coding=utf-8 import os from multiprocessing import Process, Pipe def send(pipe): pipe.send([‘spam
### Python `multiprocessing` 多进程原理与应用详解 #### 一、`multiprocessing` 概述 在Python中,`multiprocessing` 是一个用于创建和管理多进程的应用程序接口(API)。它允许用户轻松地将任务分配到多个处理器...
Python的`multiprocessing`模块是实现多进程编程的关键工具,尤其在需要充分利用多核处理器的性能时。由于Python的全局解释器锁(GIL)限制,多线程无法实现真正的并行计算,因此`multiprocessing`应运而生。本篇...
Python的`multiprocessing`模块是用于创建和管理进程的核心库,它使得在Python程序中利用多核处理器的优势成为可能。这个模块提供了进程间通信(IPC)的机制,以及类似于线程池的进程池(Pool)功能,使得并行处理...
Python的`multiprocessing`模块提供了一种高效的方式去实现多进程并行计算,同时还能结合回调函数来处理异步任务的结果。下面我们将详细探讨如何使用`multiprocessing`模块实现带有回调函数的异步调用。 `...