首页 > 系统相关 >【博学谷学习记录】超强总结,用心分享 | 进程和线程的使用

【博学谷学习记录】超强总结,用心分享 | 进程和线程的使用

时间:2023-01-30 09:22:05浏览次数:35  
标签:__ fun1 fun2 process 博学 线程 超强 进程

【博学谷IT技术支持】

一、介绍

进程:进程是资源分配最小单位;进程之间的资源是独立的;进程有自己独立的地址空间,每启动一个进程,系统都会为其分配地址空间;进程是可以并行执行的计算;一个程序可以执行多个进程,一个进程也可以执行多个程序;

线程:线程是程序执行的最小单位。一个进程有多个线程组成;线程没有独立的地址空间,同一进程的线程共享本进程的地址空间。

二、使用

python中进程使用multiprocessing

multiprocessing的使用

正常情况下,定义两个函数,然后通过调用输出,如果函数中有输出,那么应该是先执行第一个调用函数的输出,再执行第二个,有先后顺序。

import time


def fun1():
    for i in range(3):
        print(f'你好: {i}')
        time.sleep(0.5)


def fun2():
    for i in range(3):
        print(f'我好: {i}')
        time.sleep(0.5)


if __name__ == '__main__':
    fun1()
    fun2()

image.png

并发

  • 导入multiprocessing
  • 通过进程类创建进程对象,该方法有参数,分别是target和参数,target指调用的函数,参数可以有args,args以元组形式传参,传参要注意前后顺序,kwargs以字典形成传参,需要参数命名一致。
  • 启动进程执行任务
import time
import multiprocessing


def fun1(num):
    for i in range(num):
        print(f'你好: {i}')
        time.sleep(0.5)


def fun2(num):
    for i in range(num):
        print(f'我好: {i}')
        time.sleep(0.5)


if __name__ == '__main__':
    fun1_process = multiprocessing.Process(target=fun1, args=(3,))
    fun2_process = multiprocessing.Process(target=fun2, kwargs={'num': 3})
    fun1_process.start()
    fun2_process.start()

执行结果

image.png

threading的使用

  • 导入线程模块
  • 通过线程类创建线程对象。该方法有参数,分别是target和参数,target指调用的函数,参数可以有args,args以元组形式传参,传参要注意前后顺序,kwargs以字典形成传参,需要参数命名一致。
  • 启动线程执行任务
import time
import multiprocessing
import threading


def fun1(num):
    for i in range(num):
        print(f'你好: {i}')
        time.sleep(0.5)


def fun2(num):
    for i in range(num):
        print(f'我好: {i}')
        time.sleep(0.5)


if __name__ == '__main__':
    # fun1_process = multiprocessing.Process(target=fun1, args=(3,))
    # fun2_process = multiprocessing.Process(target=fun2, kwargs={'num': 3})
    # fun1_process.start()
    # fun2_process.start()

    fun1_process = threading.Thread(target=fun1, args=(3,))
    fun2_process = threading.Thread(target=fun2, kwargs={'num': 3})
    fun1_process.start()
    fun2_process.start()

执行结果

image.png

设置主线程守护和子线程守护

在正常的处理中,子进程并不会因为主进程的结束而结束,他还是会继续执行,这里就需要设置线程守护,在主进程退出后子进程直接销毁,不在执行子进程的代码。

进程的设置

// 设进程启动前
进程.daemon = True

线程的设置

// 设进程启动前
// 第一种
fun1_process = threading.Thread(target=fun1, daemon=True)

// 第二种
fun1_process.daemon(True)

三、总结

  • 进程是资源分配最小单位,线程是程序执行的最小单位。
  • 一个进程有多个线程组成;线程没有独立的地址空间,同一进程的线程共享本进程的地址空间。
  • 创建进程的资源开销要比线程大。进程可以使用多核,线程只能单核。
  • 线程间的执行顺序是无序的,由CPU调度决定某个线程先执行。 可通过current_thread()获取线程对象,输出查看

标签:__,fun1,fun2,process,博学,线程,超强,进程
From: https://www.cnblogs.com/neilniu/p/17074314.html

相关文章

  • 多线程编程
    Java多线程编程Java给多线程编程提供了内置的支持。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。多线程是多任......
  • java多线程基础小白指南--synchronized同步块
    sychronized是java多线程非常关键的一个知识点,这篇博客将从synchronized几个用法以及代码来学习。sychronized的作用是能够保证同一时间只有一个线程来运行这块代码,达到并......
  • 操作系统 - 进程与线程
    进程和线程......
  • 线程安全集合CopyOnWriteArrayList
    解决多线程的集合有以下几种1、Vertor(所有方法上加synchronized锁)能保证多线程安全,数据一致,但性能低下一般不用2、Collections.synchronizedList方法返回的List 在方......
  • 线程()
    线程概念线程是强加入进来的;gdb不支持线程调试;什么是线程学习地址LWP线程号linux内核线程实现原理学习地址线程共享资源线程不要和信号一起用;......
  • 实现单线程多并发的几种方式
    单线程爬虫适用于小规模爬虫项目,如果应对大型项目就得实现多线程多并发,那么单线程如何实现多并发,下面几个示例可以一起看看。1、asyncio2、gevent3、Twisted4、Tornado......
  • 解决多线程中线程安全的方式一
    /***方式一:同步代码块*synchronized(同步监视器){*//需要被同步的代码**}*说明:1.操作共享数据的代码,即为需要被同步的代码,如对总票数的减减、判......
  • 线程安全的ID生成器
    介绍一个改造升级版本的雪花算法ID生成器,有点是线程安全的,并且永远不可能出现重复ID。目前网上流行的ID生成器,在for循环里,或者多线程的时候会出现重复。thy-common-core......
  • java多线程基础小白指南--关键字识别(start,run,sleep,wait,join,yield)
    在学习java多线程基础上,会遇到几个关键字,理解并识别它们是掌握多线程的必备知识,下面,我将通过源码或者程序演示给出我对这几个关键字的理解,如果有不同意见,欢迎在评论区或者......
  • OpenMP 线程同步 Construct 实现原理以及源码分析(上)
    OpenMP线程同步Construct实现原理以及源码分析(上)前言在本篇文章当中主要给大家介绍在OpenMP当中使用的一些同步的construct的实现原理,如master,single,critica......