Python 多进程 踩坑记

话不多说,Python多进程要导入包from multiprocessing import Pool

具体使用方法如下

def func(i):
    print('Run task %s...' % (os.getpid()))
    t = time.time()
    # do some operations
    print('Task %s runs %0.2f seconds.' % (os.getpid(), (time.time() - t)))
    return ans
def multi_sample():
    print('Parent process %s.' % os.getpid())
    pool = Pool(processes=10)
    n_cpu = 10
    results = []
    for i in range(n_cpu):
        result = pool.apply_async(func, args=(i,))
        results.append(result)
    print('Waiting for all subprocesses done...')
    pool.close()
    pool.join()
    print('All subprocesses done.')
    # 合并进程(非必要)
    for result in results:
        res = result.get() # get方法获得进程返回值
        # 对res进行处理
        

如果不需要返回值,则无需有合并进程结果这一步。

事情到这里,似乎一切都很顺利,在终端输入top,则可以看到下面一番景象

   

但必须特别注意:

如果某个进程有错误并不会报错,这样会让你误以为一切正常,如何判断进程是否都成功执行完呢?

成功执行的标志:每个进程都返回Task 进程id runs *** seconds.未返回的说明没有成功执行
    如果你有5个进程,需要有5个返回,比如
    Task 103515 runs 24.79 seconds.
    Task 103517 runs 24.84 seconds.
    Task 103514 runs 24.88 seconds.
    Task 103518 runs 25.01 seconds.
    Task 103516 runs 25.10 seconds.

如果哪个进程没有返回,就要去检查下代码是不是哪里写错了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值