1、进程
1.1进程的创建
'''
1、导入进程包
2、创建子进程
3、启动子进程
'''
import multiprocessing
import time
def music(count):
for i in range(count):
print('听音乐')
time.sleep(0.5)
def coding(count):
for i in range(count):
print('打代码')
time.sleep(0.5)
if __name__ == '__main__':
music_process = multiprocessing.Process(target=music, name='music_pro', args=(5,))
coding_process = multiprocessing.Process(target=coding, name='coding_pro', kwargs={'count': 5})
music_process.start()
coding_process.start()
1.2获取进程编号
import multiprocessing
import time
import os
def music(count):
# 获取进程编号
print('music:', os.getpid())
# 获取进程信息
print('music:', multiprocessing.current_process)
# 获取父进程的编号
print('music的父进程:', os.getppid())
for i in range(count):
print('听音乐')
time.sleep(2)
def coding(count):
# 获取进程编号
print('coding:', os.getpid())
# 获取进程信息
print('coding:', multiprocessing.current_process)
# 获取父进程的编号
print('coding的父进程:', os.getppid())
for i in range(count):
print('打代码')
time.sleep(2)
# 定义Python入口程序
if __name__ == '__main__':
print('main:', os.getpid())
print('main:', multiprocessing.current_process)
# 定义子进程
music_process = multiprocessing.Process(target=music, name='music_pro', args=(5,))
coding_process = multiprocessing.Process(target=coding, name='coding_pro', kwargs={'count': 5})
# 启动子进程
music_process.start()
coding_process.start()
1.3守护主进程与子进程销毁
import multiprocessing
import time
# 定义所要执行任务的函数
def task():
for i in range(10):
print('任务执行中...')
time.sleep(0.2)
if __name__ == '__main__':
task_process = multiprocessing.Process(target=task)
# 守护主进程
# task_process.daemon = True
task_process.start()
time.sleep(0.5)
print('over')
task_process.terminate()
# exit()
1.4进程之间不共享全局变量
import multiprocessing
import time
# 定义全局变量
glo_list=[]
def add_data():
for i in range(5):
glo_list.append(i)
print(f'add_data:{i}')
time.sleep(0.5)
print(f'add_list:{glo_list}')
def read_data():
print(f'read_data_list:{glo_list}')
if __name__ == '__main__':
add_data_process=multiprocessing.Process(target=add_data)
read_data_process=multiprocessing.Process(target=read_data)
add_data_process.start()
add_data_process.join()
1.5主进程会等待所有子进程结束后再结束
import multiprocessing
import time
# 定义全局变量
glo_list = []
def add_data():
for i in range(5):
glo_list.append(i)
print(f'add_data:{i}')
time.sleep(0.5)
print(f'add_list:{glo_list}')
def read_data():
print(f'read_data_list:{glo_list}')
if __name__ == '__main__':
add_data_process = multiprocessing.Process(target=add_data)
read_data_process = multiprocessing.Process(target=read_data)
add_data_process.start()
add_data_process.join()
read_data_process.start()
time.sleep(0.2)
print('over')
exit()
2、线程
2.1线程的创建
'''
1、导入包
2、创建子线程
3、启动线程
'''
import threading
import time
def music():
print('music获取当前线程:', threading.current_thread())
for i in range(5):
print('正在听音乐...')
time.sleep(0.5)
def coding():
print('coding获取当前线程:', threading.current_thread())
for i in range(5):
print('正在打代码...')
time.sleep(0.5)
if __name__ == '__main__':
print('main获取当前线程:', threading.current_thread())
# 创建子线程
music_thread = threading.Thread(target=music)
coding_thread = threading.Thread(target=coding)
# 启动子线程
music_thread.start()
coding_thread.start()
2.2带有参数的多线程的使用
import threading
import time
def sing(count, times):
for i in range(count):
print('正在唱歌...')
time.sleep(times)
def coding(count, times):
for i in range(count):
print('正在打代码...')
time.sleep(times)
if __name__ == '__main__':
sing_thread = threading.Thread(target=sing, args=(5, 0.2))
coding_thread = threading.Thread(target=coding, kwargs={'count': 5, 'times': 0.2})
sing_thread.start()
coding_thread.start()
2.3线程之间的执行是无序的
import threading
import time
def task():
time.sleep(1)
print('当前线程为:', threading.current_thread().name)
# time.sleep(1)
if __name__ == '__main__':
for i in range(5):
task_thread = threading.Thread(target=task)
task_thread.start()
2.4主线程等待子线程结束后再结束
import threading
import time
def show_info():
for i in range(5):
print('text:', i)
time.sleep(0.5)
if __name__ == '__main__':
show_info_thread = threading.Thread(target=show_info())
show_info_thread.start()
time.sleep(1)
print('over')
# exit()
2.5守护子线程和销毁子线程
import threading
import time
def show_info():
for i in range(5):
print('test:', i)
time.sleep(0.5)
if __name__ == '__main__':
# show_info_thread = threading.Thread(target=show_info, daemon=True)
show_info_thread = threading.Thread(target=show_info)
show_info_thread.setDaemon(True)
show_info_thread.start()
time.sleep(1)
print('over')