進程(開啟進程的兩種方式)


一、開啟進程的兩種方式

方式一:
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__':
# Process(target=task,kwargs={'x':'子進程'})
p=Process(target=task,args=('子進程',)) # 如果args=(),括號內只有一個參數,一定記住加逗號
p.start() # 只是在操作系統發送一個開啟子進程的信號

print('主')


方式二:
from multiprocessing import Process
import time

class Myprocess(Process):
def run(self):
print('%s is running'%self.name) # name是從父類(Process)繼承來的
time.sleep(3)
print('%s is done'%self.name)

if __name__ == '__main__':
p=Myprocess()
p.start() #p.run()

print('主')


方式二(自定義name)
from multiprocessing import Process
import time

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

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

if __name__ == '__main__':
p=Myprocess('子進程1')
p.start() #p.run()
print('主')




主要使用方式一,可以開啟多個task



二、進程內存空間彼此隔離
from multiprocessing import Process
import time

x=100
def task():
global x
x=0
print('done')
if __name__ == '__main__':
p=Process(target=task)
p.start()
time.sleep(500) # 讓父進程在原地等待,等了500s后,才執行下一行代碼
print(x)




三、進程對象的方法或屬性

1、join :主線程等待p終止(強調:是主線程處於等的狀態,而p是處於運行的狀態)
p.join只能join住start開啟的進程,而不能join住run開啟的進程 (即task)

from multiprocessing import Process
import time

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

if __name__ == '__main__':
p=Process(target=task,args=('子進程',))
p.start()
p.join() # 讓父進程在原地等待,等到子進程運行完畢后,才執行下一行代碼
print('主')



同時開多個進程:

from multiprocessing import Process
import time

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

if __name__ == '__main__':
p_l=[]
start_time=time.time()
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()

stop_time=time.time()
print('主',(stop_time-start_time))


2、pid 和 ppid

from multiprocessing import Process
import time
import os

def task():
print('自己的id:%s 父進程的id:%s ' %(os.getpid(),os.getppid()))
time.sleep(200)

if __name__ == '__main__':
p1=Process(target=task)
p1.start()
print('主',os.getpid(),os.getppid())
# 爹--》主--》兒子

了解:

from multiprocessing import Process,current_process
import time

def task():
print('子進程[%s]運行。。。。' %current_process().name)
time.sleep(200)

if __name__ == '__main__':
p1=Process(target=task,name='子進程1')
p1.start()
# print(p1.name)
print('主')




from multiprocessing import Process,current_process
import time

def task():
print('子進程[%s]運行。。。。' %current_process().name)
time.sleep(2)

if __name__ == '__main__':
p1=Process(target=task,name='子進程1')
p1.start()

# print(p1.is_alive())
# p1.join()
# print(p1.is_alive()) #p.is_alive():如果p仍然運行,返回True

p1.terminate()
time.sleep(1)
print(p1.is_alive())
print('主')


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM