操作系统 进程 并发

-------------------------------------越努力的人,越幸运;如果你觉得你已经足够努力了,还是学不好,那就是方法不对,多寻求更好的方法,更好的解决方案.

# # ------------------------------------------------------------------------------------------------------------#

# # --------------[创建进程]--------------
import time
import os
from multiprocessing import Process


def func1():
time.sleep(2)
print('我是func1')

def func2():
time.sleep(3)

print('我是func2')
print('子进程的pid',os.getpid()) #查看当前进程的id
print('子进程的父进程>>>',os.getppid()) #查看父进程的id

if __name__ == '__main__':

print('主进程的pid',os.getpid())
print('当前主进程的父进程>>>',os.getppid())
start_time = time.time()
p = Process(target=func2,)
p.start() #告诉操作系统,我这边准备好了,你帮我创建并执行这个进程

func1()
end_time = time.time()
dif_time = end_time - start_time
print('>>>>',dif_time)
p.join()

# func1()
# func2()



# # --------------[pid name]--------------
from multiprocessing import Process
import time
import random
import os
class Piao(Process):
def __init__(self):
# self.name=name
# super().__init__() #Process的__init__方法会执行self.name=Piao-1,
# #所以加到这里,会覆盖我们的self.name=name

#为我们开启的进程设置名字的做法
super().__init__()
# self.name=name

def run(self):
# print('子进程id',os.getpid())

print('%s is piaoing' %self.name)
time.sleep(random.randrange(1,3))
print('%s is piao end' %self.name)
if __name__ == '__main__':

p=Piao()
p.start()
print('开始')
print(p.pid) #查看pid
print(p.name) #查看pid
print(os.getpid())

# # --------------[04 验证进程之间是空间隔离的]--------------
import time
from multiprocessing import Process


num = 100
def func1():
global num
time.sleep(1)
num = num - 1
print('>>>>>>>>',num)
# time.sleep(0.02)
# print('来玩啊')
# def func2()

if __name__ == '__main__':

p_list = []
for i in range(10):
p = Process(target=func1,)
p.start()
p.join()
p_list.append(p)

for pp in p_list:
pp.join()
# print(num)
# p.join()
# p.join()

print('主进程的num>>>>>',num)
print('主进程结束')


# # --------------[terminate,is_alive]--------------
#进程对象的其他方法一:terminate,is_alive
from multiprocessing import Process
import time
import random

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

def run(self):
print('%s is 打飞机' %self.name)
time.sleep(2)
# s = input('???') #别忘了再pycharm下子进程中不能input输入,会报错EOFError: EOF when reading a line,因为子进程中没有像我们主进程这样的在pycharm下的控制台可以输入东西的地方
print('%s is 打飞机结束' %self.name)

if __name__ == '__main__':
p1=Piao('太白')
p1.start()

p1.terminate()#关闭进程,不会立即关闭,有个等着操作系统去关闭这个进程的时间,所以is_alive立刻查看的结果可能还是存活,但是稍微等一会,就被关掉了
print(p1.is_alive()) #结果为True
print('等会。。。。')
time.sleep(1)
print(p1.is_alive()) #结果为False

猜你喜欢

转载自www.cnblogs.com/dealdwong2018/p/10029666.html