Python 34(进程重点)

一:开启进程的两种方式(*****)

 

#开启进程的方式一:
from multiprocessing import Process
import time


def task(name):
    print('%s is running' % name)
    time.sleep(3)
    print('%s is done' % name)


# 在window系统上,开启子进程的操作必须放到if __name__ == '__main__'的子代码中
if __name__ == '__main__':
    p = Process(target=task, args=('nuanxin',))  # Process(target=task,kwargs={'name':'nuanxin'})
    p.start()  # 只是向操作系统发送了一个开启子进程的信号
    print('混世魔王')

 

终端打印:

子进程  is  running

子进程  is  done

Process finished with exit code 0

 

 

 

# 开启进程的方式二:
from multiprocessing import Process
import time


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

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


# windows系统上,开启子进程的操作系统必须放到if __name__ == '__main__'的子代码中
if __name__ == '__main__':
    p = Myprocess('nuanxin')
    p.start()  # 只是向操作系统发送了一个开启进程的信号
    print('混世魔王')

 

终端打印:

子进程  is  running

子进程  is  done

Process finished with exit code 0

 

 

二:进程对象的join方法(*****)

 

# join:让主进程在原地等待,等待进程运行完毕,不会影响进程的执行
from multiprocessing import Process
import time


def task(name, n):
    print('%s is running' % name)
    time.sleep(3)
    print('%s is done' % name)


if __name__ == '__main__':
    p1 = Process(target=task, args=('子1', 1))
    p2 = Process(target=task, args=('子2', 2))
    p3 = Process(target=task, args=('子3', 3))

    start = time.time()
    p1.start()
    p2.start()
    p3.start()
    time.sleep(5)

    p3.join()  # 3
    p1.join()
    p2.join()
    print('混世魔王', (time.time() - start))  # 5.027485609054565  5.029683589935303  5.025939464569092

    start = time.time()
    p_l = []
    for i in range(1, 4):
        p = Process(target=task, args=('子%s' % i, i))
        p_l.append(p)
        p.start()

    for p in p_l:
        p.join()
        print('混世魔王', (time.time() - start))

终端打印:

子进程  is  running

子进程  is  running

子进程  is  running

子进程  is  done

子进程  is  done

子进程  is  done

Process finished with exit code 0
 

 

 

三:进程对象之间内存空间隔离(*****)

进程和进程之间的空间不会互相干扰,没办法直接获取另一个进程空间里的数据,要获取只有一种办法,就是写到文件里面再获取

from multiprocessing import Process

n=100
def task():
    global n
    n=0

if __name__ == '__main__':
    p=Process(target=task)
    p.start()
    p.join()
    print(n)
View Code

 

posted @ 2018-09-05 19:49  温暖你的心  阅读(313)  评论(0编辑  收藏  举报