python multiprocessing模块

multiprocessing 充分利用cpu多核
一般情况下cpu密集使用进程池,IO密集使用线程池。python下想要充分利用多核CPU,就用多进程。
pool = multiprocessing.Pool(multiprocessing.cpu_count())
__init__(self, group=None, target=None, name=None, args=(), kwargs={})
group:进程所属组。基本不用
target:表示调用对象。
args:表示调用对象的位置参数元组。
name:别名
kwargs:表示调用对象的字典。
join()方法表示等待子进程结束以后再继续往下运行,通常用于进程间的同步。

#!/usr/bin/env python
#coding=utf-8

import multiprocessing

def do(n) :
  name = multiprocessing.current_process().name
  print name,'starting'
  print "worker ", n

if __name__ == '__main__' :
  for i in xrange(5) :
    p = multiprocessing.Process(target=do, args=(i,))  //加,才是元组,不加的话str中的每个字符作为参数传递
    p.start()
    p.join()
    print "Process end."

multiprocessing 模块下的Pool类
from multiprocessing import Pool

apply_async(func[, args=()[, kwds={}[, callback=None]]])
它是非阻塞且支持结果返回进行回调。

pool = multiprocessing.Pool(processes = 3)
    for i in xrange(4):
        msg = "hello %d" %(i)
        pool.apply_async(func, (msg, ))  //非阻塞

pool = multiprocessing.Pool(processes = 3)
    for i in xrange(4):
        msg = "hello %d" %(i)
        pool.apply(func, (msg, ))   //阻塞,等一个进程执行完再执行下一个

import multiprocessing
import time

def func(msg):
    print "msg:", msg
    time.sleep(3)
    print "end"
    return "done" + msg

if __name__ == "__main__":
    pool = multiprocessing.Pool(processes=4)
    result = []
    for i in xrange(3):
        msg = "hello %d" %(i)
        result.append(pool.apply_async(func, (msg, )))   //结果回调
    pool.close()
    pool.join()
    for res in result:
        print ":::", res.get()
    print "Sub-process(es) done."

map(func, iterable[, chunksize=None])
它会使进程阻塞直到返回结果。

#coding: utf-8
import multiprocessing

def m1(x):
    print x * x

if __name__ == '__main__':
    pool = multiprocessing.Pool(multiprocessing.cpu_count())
    i_list = range(8)
    pool.map(m1, i_list)

os.walk()可以得到一个三元tupple(dirpath, dirnames, filenames),
第一个为起始路径,第二个为起始路径下的文件夹,第三个是起始路径下的文件。

dirpath 是一个string,代表目录的路径,
dirnames 是一个list,包含了dirpath下所有子目录的名字。
filenames 是一个list,包含了非目录文件的名字。

import os
import os.path
fileDir = os.sep + "export" + os.sep + "sh" + os.sep + "cate3_expandnames"
for root, dirs, files in os.walk(fileDir):
    for name in files:
        print os.path.join(root, name)

for a in os.walk(fileDir):
        print(a[0])  
        print(a[1])  
        print(a[2])


  • 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、付费专栏及课程。

余额充值