首页 > 其他分享 >线程

线程

时间:2023-09-26 15:25:24浏览次数:51  
标签:__ name Thread 线程 print import

开线程的第一种方式:

from multiprocessing import Process  #导入进程

from threading import Rhread  #导入线程

import time

 

 

def task(name):

  print('%s is runing'%name)

  time.sleep(1)

  print('%s iis over')

#开启线程不需要再main下面执行代码 直接书写就可以

#但是我们还是习惯性的将启动命令卸载main下面

t=Thread(target=task,args=('egon,'))

p=Process(target=task,args=('jason,'))

p.start()

t.start()#创建线程

print(主)

线程的代码会先打印   线程的开销非常小 几乎是代码一致性线程就已经创建了

 

开线程的第二种模式(用类):

from threading import Thread

import time

class MyThead(Thraed):

  def __init__(self,name):   这种读作双下init方法最标准的读法针对双下划线开头和结尾的读作双下xxx

  重写了别人的方法,又不知道别人的方法里有啥 就先调用父类的方法

  super().__init__()    先调用

  self.name=name   再做额外的操作

  def run(self):

    print('%s is running',%self.name) 当函数需要传参的话可以用形参或者闭包

 

tcp服务端实现并发的效果:

import socket

from threading import Thread

from multiprocessing import Process

服务端:

1.要有固定的ip和PORT

2.要有24小时不间断提供服务

3.能够支持并发

server=socket.socket()   #  括号里不写默认TCP协议

server.bin(('127.0.0.1',8080))  绑定一个it的端口

server.listen(5)

 

#将服务的代码单独封装成一个函数

def talk(conn):

#通信循环

  while True:

    try:

    date=conn.recv(1024)

    #针对Mac Linux客户端断开连接后

    if len(data)==0:break

    print(data.decode('utf-8'))

    conn.send(data.upper())

  except ConnectionReseError as e:

    print(e)

    break

  coon.close()

#链接循环:

while Ture:

  conn,addr=server.accept()  #接客人

  #叫其他人来服务

t=Thread(target=talk,args=(conn,))开线程

t.strat()

 

客户端:

import socket

client.=socket.socket()

cliemt.connect((127.0.0.1),8080)

while True:

  client.send(b'hello word')

  data=client.recv(1024

  peint(data.decode('utf-8')

 

线程对象join方法:

from threading  import Thread

import time

 

 

def task(name):

  print('%s is running'%name)

  time.sleef(30

  print('%s is over'%name)

 

 

if __name__='__main__':

  t=Thread(target=task,args=('egon'))

  t.start()

  t.join()   #主线程等待子线程运行结束

  print('主')

  

 

同一个进程下的多个线程数据是是共享的

 

 

线程对象及其他方法:

active_count() #统计当前正在活跃的线程数

current_thread().name # 获取当前线程的名字

 

守护线程:主线程运行结束之后不会立刻结束,会等待所有其他非守护线程结束才会结束,因为主线程的结束意味着所在的进程的结束

开守护:t.daemon=True

GIL全局解释器锁

评审:小猿取经磨课原密码:xiaoyuanqujing@666

在cpython解释器中GIL是一把互斥锁,用来组织同一个进程下多个线程的同时执行

 

Python有cpython\jpython\pypypython三种  我们一般用的是cpython

同一个金成宰的多个线程无法利用多核优势

 

重点:

1.GIL不是Python的特点  而是cpython解释器的特点

2.GIL是保证解释器级别(线程与线程之间)的数据的安全

3.GIL会导致同一个进程喜爱的多个线程的无法同时执行

4.针对不同的数据还是需要加不同的锁处理  

5.解释型语言的通病  :同一个进程下多个线程无法利用多核优势

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

    

 

标签:__,name,Thread,线程,print,import
From: https://www.cnblogs.com/97zs/p/17716678.html

相关文章

  • Linux-----进程、线程、协程的生命周期、调度器slab
    Linux进程、线程、协程的区别进程进程是操作系统中的一个独立执行单元。每个进程都有自己的独立内存空间,包括代码段、数据段、堆栈等。进程之间通常需要通过进程间通信(IPC)来交换数据和信息。进程启动和销毁开销较大,因为需要分配和释放独立的内存空间。进程之间隔离度高,一个......
  • 细说多线程,如何解决线程安全问题
    关于多线程,首先熟练分清楚线程和进程的关系:进程:内存中正在运行的一个程序线程:进程中的一个最小执行单元。一个进程最少得有一个线程(Java程序中一个请求就是一个线程)。一、创建多线程的方式有四种:1.继承Thread类1.定义一个子类继承Thread类,并重写run方法2.创建Thread的子类对......
  • 多线程
    首先先说一下什么是进程什么事线程,进程就是在内存中正在运行的程序,线程是进程的最小执行单位,一个进程最少得有一个线程,线程是指软件中的每一个功能。    线程的创建方式有三种,继承Thread类,实现Runable接口,实现Callable接口,继承Thread类和实现Runable接口的区别在于,java是单......
  • 多线程
    学习多线程我们要先明白进程与线程进程就是在内存中正在运行的程序,就跟我们手机上一个个正在运行的软件一样.线程:线程是进程的最小执行单元,一个进程中最少拥有一个线程,线程就相当于手机软件中的一个个软件线程创建的方式(共四种)第一种是继承Thread类,重写run......
  • 多线程基本
    线程与进程得关系一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程线程则是计算机中最小执行单元.比如电脑管家这个软件就是一个进程而里面的杀毒清理垃圾全局守护这些功能就是一个个线程.一个进程最少拥有一个线程.线程的创建方......
  • WebRTC C++ 线程和线程管理剖析
    线程管理实例化代码(单例)ThreadManager*ThreadManager::Instance(){staticThreadManager*constthread_manager=newThreadManager();returnthread_manager;}初始化位置WebRTC中启动新线程的标准方法是通过创建Thread对象,然后调用Thread.Start()方法来启用......
  • 线程有哪些常用的调度方法?
    一、线程等待在Object类中有一些函数可以用于线程的等待:1.1wait()当一个线程A调用一个共享变量wait()方法时,线程A会被阻塞挂起,发生以下情况才会返回:(1)线程A调用了共享对象的notify()或者notifyAll()方法。(2)其它线程调用了线程A的interrupt()方法,线程A抛出InterruptedException异常......
  • HarmonyOS使用多线程并发能力开发
     一、多线程并发概述1、简介并发模型是用来实现不同应用场景中并发任务的编程模型,常见的并发模型分为基于内存共享的并发模型和基于消息通信的并发模型。Actor并发模型作为基于消息通信并发模型的典型代表,不需要开发者去面对锁带来的一系列复杂偶发的问题,同时并发度也相对......
  • 进程和线程之间区别
    进程和线程是计算机科学中重要的概念,用于描述程序执行的不同方式和组织形式。进程(Process):进程是程序的一次执行过程,是计算机系统分配资源的基本单位。每个进程拥有独立的内存空间,包括代码、数据、堆栈等,使得进程间的数据不共享,相互隔离。进程可以包含多个线程,共享该进程的......
  • 【技术研究】线程和进程
    有一句概念“进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位。”分上下句去理解他吧,首先贴一张图所看到是一个进程的内存空间,分为一些栈区,堆区,一些资源区等等。“进程是操作系统资源分配的基本单位”,进程包含一个程序的执行实例,说的具体点就是他有......