您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息

Python实现多进程的详解(附示例)

2024/4/24 13:25:16发布6次查看
本篇文章给大家带来的内容是关于python实现多进程的详解(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
fork函数创建子进程
基本使用
linux 操作系统提供了一个 fork函数用来创建子进程。fork()位于python的os模块中。
使用导入os模块即可。
import osos.fork()
每次调用fork()函数后,相应的父进程都会生成一个子进程。
例如下面这段代码:
import osos.fork()os.fork()os.fork()
执行之后将会生成8个进程。
fork()函数的返回值
fork()函数对于子进程的返回值永远是0,而对父进程的返回值则为子进程的pid(进程号)。
实例
#!/usr/bin/env pythonimport osimport timert = os.fork()if rt == 0:    print(fthe child process is {os.getpid()} . his father is {os.getppid()})  # os.getpid()获取当前进程进程号,os.getppid()获取当前进程的父进程号    time.sleep(5)else:    print(fthe father process is {os.getpid()} . his father is {os.getppid()})    time.sleep(5)print(fnow the process is {os.getpid()} . his father is {os.getppid()})
执行结果:
进程模块
导入模块
python也提供了multiprocessing库给全平台提供了多线程编程。
import multiprocessing
简单进程
下面代码为一个简单进程:
from multiprocessing import processdef work(num):    for i in range(10):        num += 1    print(num)    return 0def main():    num = 1    p1 = process(target = work, args = (num,))    p1.start()if __name__ == '__main__':    main()
这里从multiprocessing库引入process这个类。
p1 = process(target = work, args = (num,))是创建一个进程。target为所要执行任务的函数,args则为接收的参数,必须以元组形式给与。
start()是让进程开始运行。
同时进程有一些方法:
join方法
process的join方法与多线程类似。为等待进程运行结束。
使用方法:join(timeout)。
使用join(),程序会等待进程结束后再继续进行下面的代码。
如果加入了timeout参数,则程序会等待timeout秒后继续执行下面的程序。
close方法
close()用于关闭进程,但是不能关闭正在运行中的子进程。
进程类
可以通过创建类的方式实现多进程:
from multiprocessing import processimport timeclass my_process(process):    def __init__(self,num):        process.__init__(self)        self.num = num    def run(self):        time.sleep(2)        print(self.num)def main():    for i in range(10):        p = my_process(i)        p.start()if __name__ == '__main__':    main()
进程池
from multiprocessing import poolimport timedef target(num):    time.sleep(2)    print(num)def main():    pool = pool(3)    for i in range(3):        pool.apply_async(target,(i,))    pool.close()    pool.join()    print('finish!!!')if __name__ == '__main__':    main()
对pool对象调用join()方法会等待所有子进程执行完毕,调用join()之前必须先调用close(),调用close()之后就不能继续添加新的process了。
pool(num)里的num为要添加到里面的进程数。不指定进程数,则默认为cpu核心数量。
进程间相互独立
多进程的每一个进程都有一份变量的拷贝,进程之间的操作互不影响。
import multiprocessingimport timezero = 0def change_zero():    global zero    for i in range(3):        zero = zero + 1        print(multiprocessing.current_process().name, zero)if __name__ == '__main__':    p1 = multiprocessing.process(target = change_zero)    p2 = multiprocessing.process(target = change_zero)    p1.start()    p2.start()    p1.join()    p2.join()    print(zero)
最后的执行结果:
如果进行文件io操作,则多进程都会写入同一个文件中。
队列
使用multiprocessing里的queue可使不同进程访问相同的资源。
from multiprocessing import process, queuedef addone(q):    q.put(1)def addtwo(q):    q.put(2)if __name__ == '__main__':    q = queue()    p1 = process(target=addone, args = (q, ))    p2 = process(target=addtwo, args = (q, ))    p1.start()    p2.start()    p1.join()    p2.join()    print(q.get())    print(q.get())
以上就是python实现多进程的详解(附示例)的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录