python多线程多进程讲解

news/2024/7/6 1:56:49 标签: 多线程

时隔多天,又开始新的内容,欢迎大家评论,一起学习,一起进步。

进程与线程的关系:操作系统执行一个程序时,都会释放一个内存,而这个内存区域就可以说是xxx进程,进程里有许多的线程工作(进程是资源单位,线程是执行单位,一个进程至少要有一个线程,启动某一个程序默认都有一个主线程)

#单线程
def func():
    for i in range(10):
        print("func",i)

if __name__ == '__main__':
    func()
    for i in range(10):
        print('main',i)

现象:(线性关系,一个完成,到另外一个)
在这里插入图片描述
多线程写法(一)

#多线程
from threading import Thread  #线程类

def func():
    for i in range(1000):
        print('func',i)

if __name__ == '__main__':
    t=Thread(target=func)#创建新线程
    t.start()#开始执行线程(多线程状态为可开启,具体什么时候能执行看upu)


    for i in range(1000):
        print('main',i)

现象:(一起进行)
在这里插入图片描述

多进程写法(二)

#多线程
from threading import Thread
class MYThread(Thread):
    def run(self): #固定的,run()作用:当线程被执行时,执行run()
        for i in range(1000):
            print('子线程',i)
        

if __name__ == '__main__':
    t=MYThread()
    #t.run()#不能,这是方法调用
    t.start()  #开始启动线程
    for i in range(1000):
        print('主线程',i)

现象:
在这里插入图片描述
多线程参数写法:

from threading import Thread  #线程类

def func(name):
    for i in range(1000):
        print(name,i)

if __name__ == '__main__':
    t1=Thread(target=func ,args=("参数1",))#传递参数必须是元组
    t1.start()#开始执行线程(多线程状态为可开启,具体什么时候能执行看upu)

    t2 = Thread(target=func, args=("参数2",))  # 创建新线程
    t2.start()

现象:
在这里插入图片描述

多进程:(一般少用,cpu不够用)
方法一

#多进程
from multiprocessing import Process

def func():
    for i in range(10):
        print('子进程',i)

if __name__ == '__main__':
    p=Process(target=func)#创建进程
    p.start()#开启进程
    for i in range(10):
        print('主进程',i)

现象:
在这里插入图片描述
方法二

#多进程
from multiprocessing import Process
class MYThread(Process):
    def run(self):
        for i in range(1000):
            print('子进程', i)

if __name__ == '__main__':
    p= MYThread()#实例化对象
    p.start()  # 开始启动线程
    for i in range(1000):
        print('  主进程', i)

http://www.niftyadmin.cn/n/1833225.html

相关文章

freemarker(FTL)常见语法大全

FreeMarker的插值有如下两种类型: 1,通用插值${expr}; 2,数字格式化插值:#{expr}或#{expr;format} 通用插值: ${book.name?if_exists } //用于判断如果存在,就输出这个值 ${book.name?default(‘xxx’)} //默认值xxx ${book.name!”xxx”} //默认值xxx ${b…

2012 jinhua

2012 jinhua I题&#xff1a;签到题&#xff0c;没什么意思。 #include<iostream> #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstdlib>using namespace std;const int maxn1000100;int n; int a[maxn];int main() {whil…

ORCLE 如何停止一个JOB【HOW TO STOP A JOB IN THE ORACLE】

为同事解决一个因为网络连接情况不佳时&#xff0c;执行一个超长时间的SQL插入操作。 既然网络状况不好&#xff0c;就选择了使用一次性使用JOB来完成该插入操作。在JOB执行一段时间后&#xff0c;我发现被插入表有些问题&#xff08;惭愧&#xff0c;当时也没有先检查检查…

贪心算法(求最优解)

小编开始自学&#xff0c;开始理解与学习算法&#xff0c;如果内容有误&#xff0c;欢迎大家评论&#xff0c;互动。 贪心算法&#xff08;Gre小编开始自学&#xff0c;开始理解与学习算法&#xff0c;如果内容有误&#xff0c;欢迎大家评论&#xff0c;互动。 贪心算法&#x…

算法入门笔记(一,介绍,递归)

小编认为算法是一个程序员必不可少的核心&#xff0c;所以从今天开始练习与加深学习。话不多说&#xff0c;开始学习。 时间复杂度&#xff1a;用来评估算法运行速率的式子。 一般情况下&#xff1a;时间复杂度高比复杂度底高&#xff08;通常条件一样情况下&#xff09; prin…

Spring Boot 系列(八)@ControllerAdvice 拦截异常并统一处理

Spring Boot 系列&#xff08;八&#xff09;ControllerAdvice 拦截异常并统一处理 在spring 3.2中&#xff0c;新增了ControllerAdvice 注解&#xff0c;可以用于定义ExceptionHandler、InitBinder、ModelAttribute&#xff0c;并应用到所有RequestMapping中。参考&#xff1…

java新手笔记25 日期格式化

1.系统时间 package com.yfs.javase;import java.sql.Time; import java.sql.Timestamp; import java.util.Calendar; import java.util.Date;public class DateDemo1 {/*** 时间表示法*/public static void main(String[] args) {// long表示法long now System.currentTimeMi…

Quick Outline

为什么80%的码农都做不了架构师&#xff1f;>>> 快速大纲 作为一个developer&#xff0c;我们必须得学会一些快捷的方式&#xff0c;帮助自己快速的达到相应的目的。比如&#xff0c;我查看一个类&#xff0c;这个类定义了许多的方法&#xff0c;我不想去看outlin…