'''
Process类方法:
start() 启动进程
join() 主进程让步
terminate() 中断进程
is_alive() 判断进程是否是活跃的
run()
'''
import os
from time import sleep
from multiprocessing import Process
def weichat(name):
for i in range(5): # parent process id
print('正在跟{}聊天,这是第{}句'.format(name, i + 1), os.getpid(), os.getppid())
sleep(1)
def study(course, time):
for i in range(time):
print('认真学习{},这个第{}小时'.format(course, i + 1), os.getpid(), os.getppid())
sleep(1)
if __name__ == '__main__':
p1 = Process(target=weichat, args=('瑶瑶姐',), name='一辰')
p2 = Process(target=study, kwargs={'course': 'python', 'time': 4}, name='武茏')
p1.start()
p2.start()
# p1.join()
# p2.join()
print(p1.name) # Process-1 默认的
print(p2.name) # Process-2
# 让主进程给子进程让步
# p1.join()
# p2.join()
# # p1.run()
# print(p1.is_alive())
# p1.terminate()
for i in range(5):
print('---------->', i, os.getpid())
if i == 3:
p1.terminate()
sleep(1)
'''
进程池: Pool
'''
import os
import random
import time
from time import sleep
from multiprocessing import Process, Pool
def download(song):
print('正在下载:{},当前进程号:{}'.format(song, os.getpid()))
ran = random.randint(1, 5)
sleep(ran)
print('下载{}成功'.format(song))
if __name__ == '__main__':
p = Pool(4)
songs = ['大碗宽面', '麻婆豆腐', '小苹果', '羊肉泡馍', '宫保鸡丁']
start = time.time()
for song in songs:
# 非阻塞式进程下载
p.apply_async(func=download, args=(song,))
# 阻塞式: 只要前一个进程不完成任务,后面的任务就没有办法开始
# p.apply(func=download, args=(song,))
# 结束添加任务
p.close()
# 阻塞主进程
p.join()
end = time.time()
print('全部歌曲下载完毕!用时:{}'.format(end-start))