python-开启进程的两种方法;进程对象的方法或属性详解

# 方式一:通用版
# from multiprocessing import Process
# import  time
# def task(x):
#     print('%s is running '%x)
#     time.sleep(3)
#     print('%s is done'%x)
#
# if __name__ == '__main__':
#     #p=Process(target=task,kwargs={'x':'子进程'})
#     p=Process(target=task,args=('子进程',)) #这是元组,如果args=(),括号内只有一个参数,一定记住加括号
#     p.start() #只是在操作系统发送一个开启子进程的信号,并不是创建进程,创建进程是操作系统来完成的
#     print('主')

# 方式二:自定义类
from multiprocessing import Process
import time


class Myprocess(Process):
    def __init__(self, x):
        super().__init__()
        self.name = x

    def run(self):
        print('%s in runing' % self.name)
        time.sleep(3)
        print('%s is done ' % self.name)


if __name__ == '__main__':
    p = Myprocess('子进程')
    p.start()  # 这里start 是直接执行p.run()
    print('主')

# from multiprocessing import Process
# import  time
# def task(x):
#     print('%s is running '%x)
#     time.sleep(3)
#     print('%s is done'%x)
#
# if __name__ == '__main__':
#     #p=Process(target=task,kwargs={'x':'子进程'})
#     p=Process(target=task,args=('子进程',)) #这是元组,如果args=(),括号内只有一个参数,一定记住加括号
#     p.start() #只是在操作系统发送一个开启子进程的信号,并不是创建进程,创建进程是操作系统来完成的
#     print('主')

# 方式二:自定义类
from multiprocessing import Process
import time


class Myprocess(Process):
    def __init__(self, x):
        super().__init__()
        self.name = x

    def run(self):
        print('%s in runing' % self.name)
        time.sleep(3)
        print('%s is done ' % self.name)


if __name__ == '__main__':
    p = Myprocess('子进程')
    p.start()  # 这里start 是直接执行p.run()
    print('主')

 

进程对象的方法或属性:

join 让父进程在原地等待到子进程运行完毕后,才执行代码

查看进程号的两种方式 :父进程pid查看子进程pid号,os.getpid()查看子进程,os.getppid()查看父进程

courrent-process().name #在子进程中查看子进程名字

print(p.is_alive())              #判断子进程有没有死

p.terminate()                      #向操作系统发送杀死进程信号,真正杀死子进程取决操作系统

# join 让父进程在原地等待到子进程运行完毕后,才执行代码
# from multiprocessing import Process
# import time
#
#
# def task(name):
#     print('%s in runing ' % name)
#     time.sleep(5)
#     print('%s in done ' % name)
#
#
# if __name__ == '__main__':
#     p = Process(target=task, args=('子进程'), )
#     p.start()
#     p.join()  # join #让父进程在原地等待到子进程运行完毕后,才执行代码
#     print('主')

# 循环创建多个子进程
# from multiprocessing import Process
# import time
#
#
# def task(name, n):
#     print('%s in runing' % name)
#     time.sleep(n)
#     print('%s is done ' % name)
#
#
# if __name__ == '__main__':
#     p_1 = []
#     start = time.time()
#     for i in range(1, 4):
#         p = Process(target=task, args=('子进程%s' % i, i))
#         p_1.append(p)
#         p.start()  # 循环开启多个并发子进程
#
#     for p in p_1:
#         p.join()  # 等待多个进程子进程运行完毕
#     stop = time.time()
#     print('主', stop - start)

# from multiprocessing import Process
# import time
#
#
# def task(name):
#     print('%s in runing ' % name)
#     time.sleep(5)
#     print('%s in done ' % name)
#
#
# if __name__ == '__main__':
#     p = Process(target=task, args=('子进程'), )
#     p.start()
#     p.join()  # join #让父进程在原地等待到子进程运行完毕后,才执行代码
#     print('主')

# 循环创建多个子进程
# from multiprocessing import Process
# import time
#
#
# def task(name, n):
#     print('%s in runing' % name)
#     time.sleep(n)
#     print('%s is done ' % name)
#
#
# if __name__ == '__main__':
#     p_1 = []
#     start = time.time()
#     for i in range(1, 4):
#         p = Process(target=task, args=('子进程%s' % i, i))
#         p_1.append(p)
#         p.start()  # 循环开启多个并发子进程
#
#     for p in p_1:
#         p.join()  # 等待多个进程子进程运行完毕
#     stop = time.time()
#     print('主', stop - start)

 
#查看进程号的两种方式
# pid查看进程pid号,os.getpid()查看子进程,os.getppid()查看父进程

from multiprocessing import Process

import time, os


def task(n):
    print('%s in runing' % os.getpid())
    time.sleep(n)
    print('%s in done' % os.getpid())


if __name__ == '__main__':
    p = Process(target=task, args=(10,))
    p.start()
    print(p.pid)  # 父进程里查看子进程pid号

from multiprocessing import Process

import time, os

#方式二 父进程的父进程-父进程-子进程
def task():
    print('自己的id:%s  父进程的id号:%s' % (os.getpid(), os.getppid()))#第一个是子进程,第二个是父进程
    time.sleep(10)


if __name__ == '__main__':
    p = Process(target=task)
    p.start()
    print('主', os.getpid(), os.getppid())# 第一个是父进程 ,第二是父进程的父进程


from multiprocessing import Process

import time, os


def task(n):
    print('%s in runing' % os.getpid())
    time.sleep(n)
    print('%s in done' % os.getpid())


if __name__ == '__main__':
    p = Process(target=task, args=(10,))
    p.start()
    print(p.pid)  # 父进程里查看子进程pid号

from multiprocessing import Process

import time, os

#方式二 父进程的父进程-父进程-子进程
def task():
    print('自己的id:%s  父进程的id号:%s' % (os.getpid(), os.getppid()))#第一个是子进程,第二个是父进程
    time.sleep(10)


if __name__ == '__main__':
    p = Process(target=task)
    p.start()
    print('主', os.getpid(), os.getppid())# 第一个是父进程 ,第二是父进程的父进程

 

 

 

 

 

#current_process().name 在子进程中查看子进程名字
#print(p.is_alive())#判断子进程有没有死
# p.terminate()  #向操作系统发送杀死进程信号,真正杀死子进程取决于操作系统
from  multiprocessing import Process, current_process
import time

def task():
    print('子进程[%s]运行。。。。。'%current_process())

if __name__ == '__main__':
    p=Process(target=task,name='子进程')
    p.start()

    # print(p.is_alive())#判断子进程有没有死
    # p.join()
    # print(p.is_alive())

    p.terminate()  #向操作系统发送杀死进程信号,真正杀死子进程取决于操作系统
    time.sleep(1)
    print(p.is_alive())
    print('主')
from  multiprocessing import Process, current_process
import time

def task():
    print('子进程[%s]运行。。。。。'%current_process())

if __name__ == '__main__':
    p=Process(target=task,name='子进程')
    p.start()

    # print(p.is_alive())#判断子进程有没有死
    # p.join()
    # print(p.is_alive())

    p.terminate()  #向操作系统发送杀死进程信号,真正杀死子进程取决于操作系统
    time.sleep(1)
    print(p.is_alive())
    print('主')

 

posted @ 2018-07-15 09:36  Marcki  阅读(401)  评论(0编辑  收藏  举报