Python中的线程与进程

1 篇文章 0 订阅
1 篇文章 0 订阅

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')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值