花点时间把python入门——多进程、进程池

1.多进程
fork()函数调用一次返回两次,分别在父进程和子进程内返回,子进程永远返回0,父进程返回子进程的ID,子进程只需要调用getppid()可以拿到父进程的ID。
在python中创子进程:

import os
print('process (%s) start...' % os.getpid())
pid =os.fork()
if pid==0:
    print('i am child process (%s) and my parent is (%s).'%(os.getpid(),os.getppid()))
else:
    print('i (%s)  just created a child process (%s).'%(os.getpid(),pid))

结果:

process (78413) start...
i (78413)  just created a child process (78996).
i am child process (78996) and my parent is (78413).

2.使用multiprocessing
启动一个子进程并等待其结束:

from multiprocessing import Process
import os
def run_proc(name):
    print("运行子进程 %s (%s)"%(name,os.getpid))

if __name__ == '__main__':
    print('父进程是 %s.'%os.getpid())
    p = Process(target=run_proc, args=('test',))
    #p=process(target=run_proc,args=('test',))
    print('子进程将开始')
    p.start()
    p.join()
    print('子进程结束')

结果:
运行子进程 test ()
子进程结束

3.`进程池`
如果要启动大量的子进程,可以使用进程池的方式批量创建子进程
代码
```python
from multiprocessing import Pool
import os,time,random
def long_time_task(name):
    print('运行测试 %s (%s)' %(name,os.getpid()))
    start = time.time
    time.sleep(random.random()*3)
    end = time.time
    print('测试%s 运行 %0.2f seconds'%(name,(end - start)))
if __name__=='__main__':
    print('父进程是%s'%os.getpid())
    p=Pool(4)
    for i in range(5):
        p.apply_async(long_time_task,args=(i,))
    print('等待')
    p.close()
    p.join()
    print('完成')

结果:

父进程是84957
等待
运行测试 0 (84960)
运行测试 1 (84959)
运行测试 2 (84961)
运行测试 3 (84962)
运行测试 4 (84962)
完成
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是不想再当小白的黑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值