标题:多进程编程的3种方法
取消只看楼主
zxq0103
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2023-3-10
结帖率:0
 问题点数:0 回复次数:0 
多进程编程的3种方法
多进程的编程方法1,创建Process的实例,传入任务执行函数作为参数
程序代码:
import os,time
from multiprocessing import Process

def worker(arg):
    for i in range(5):
        print("子进程执行中>>> 子进程id={0},父进程id={1},子进程编号{2}".format(os.getpid(),os.getppid(),arg))
        time.sleep(1)
    print("子进程终止,id={0}".format(os.getpid()))

def main(num):
    print("主进程执行中>>> 主进程id={0}".format(os.getpid()))
    ps=[]
    for i in range(num):  # 创建子进程实例
        p=Process(target=worker,args=(i,))
        ps.append(p)
    for i in range(num):  # 开启进程
        ps[i].start()
    for i in range(num):  # 阻塞进程
        ps[i].join()
    print("主进程终止")

if __name__ == '__main__':
    num = 3 # 要创建的进程数量
    main(num)


多进程的编程方法2,派生Process的子类,重写run方法
程序代码:
import os,time
from multiprocessing import Process

class MyProcess(Process):
    def __init__(self,arg):
        self.arg = arg
        Process.__init__(self)
    def run(self):
        print("子进程开始>>> 子进程id={0},主进程id={1}".format(os.getpid(),os.getppid()))
        for i in range(5):
            print("子进程执行中...子进程id={0},子进程编号{1}".format(os.getpid(),self.arg))
            time.sleep(1)
        print("子进程终止,子进程id={}".format(os.getpid()))
def main(num):
    p = []
    print("主进程开始>>> 主进程id={}".format(os.getpid()))
    for i in range(num):
        myp=MyProcess(i) # i为传进子程序的参数
        p.append(myp)
    for i in range(num):
        p[i].start()
    # myp.join()
    print("主进程终止")
if __name__ == '__main__':
    main(3)


多进程的编程方法3,使用进程池Pool
程序代码:
import os,time
from multiprocessing import Pool

def worker(arg):
    print("子进程开始执行>>> 子进程id={},主进程id={},编号{}".format(os.getpid(),os.getppid(),arg))
    time.sleep(1)
    print("子进程终止>>> 子进程id={},编号{}".format(os.getpid(),arg))

def main(p_num,w_num):
    print("主进程开始执行>>> 主进程id={}".format(os.getpid()))
    ps=Pool(p_num) #p_num进程池的任务数
    for i in range(w_num): #w_num总任务数
        # ps.apply(worker,args=(i,))     # 同步执行
        ps.apply_async(worker,args=(i,)) # 异步执行

    # 关闭进程池,停止接受其它进程
    ps.close()
    # 阻塞进程
    ps.join()
    print("主进程终止")
if __name__ == '__main__':
  main(5,20) # 进程池任务数,总任务数
搜索更多相关主题的帖子: num print arg format 进程 
2023-04-12 10:33



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-511881-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.052451 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved