Python进程与线程怎么理解

本篇内容介绍了“Python进程与线程怎么理解”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

进程和线程的理解

线程是操作系统能够进行预算调度的最小单位,它包含在进程中是进程中的实际运作单位。

Linux 进程有父进程和子进程,window 系统的进程是平等关系

一个标准的线程有线程 ID ,当前指令指针,寄存器集合和堆栈组成,在许多系统中,创建一个线程比创建一个进程要快 1- 100 倍。

每一个进程都认为自己独占所有的计算器硬件资源

进程就是独立的王国,进程间不可以随便共享数据

线程就是省份,同一个进程内的线程可以共享进程的资源,每一个进程拥有自己独立的堆栈。

Python 中的进程和线程

进程会启动一个解释器进程,线程共享一个解释器进程。

 

线程

创建一个最简单的线程程序

import threading
def worker():
  print("hello world")
t = threading.Thread(target=worker) # 创建线程对象
t.start()  #启动

 

使用 print  函数打印(因为线程切换回打断 print 函数的执行 )会导致线程不安全,推荐使用 logging

import logging
import threading
FORMAT = '%(asctime-15s/t [%(threadName)s, %(thread)8d] %(message)s)'
logging.basicConfig(level=logging.INFO, format=FORMAT)
def worker():
  for i in range(100):
    logging.info("{} is running".format(threading.current_thread().name))
for i in range(5):
  name = "workr-{}".format(i)
  threading.Thread(target=worker).start()

 

线程安全:线程执行一段代码,不会产生不确定的结果,那这段代码就是线程安全的 

daemon 线程和 no-daemon 线程

这里的 daemon 不是 linux 中的守护进程

如果有 non-daemon 线程的时候,主线程退出时也不会杀掉所有daemon线程,直到所有 non-daemon 线程全部结束,如果还有 daemon 线程,主线程需要退出,会结束所有的 daemon 线程退出 

threading.local

Python 提供 threading.local 类,将这个类实例化得到一个全局对象,但是不同线程使用这个对象存储的数据其他线程看不见。

ctx = threading.local()
ctx.x = 123

 

Threading.local 类构建了一个大字典,其元素是每一线程实例的地址为 key 和线程对象引用线程单独的字典的映射

{id(Thread)->(ref(Thread),thread-local dict)}

 

通过 threading.local 实例就可以在不同的线程中,安全的使用线程独有的数据,做到线程间数据隔离,如同本地变量一样安全。 

threading.Timer

Threading.Timer 继承自 Thread,这个类用来定义多久执行一个函数

class threading.Timer(interval, function, args=None, kwargs=None)

 

Start 方法执行之后,Timer 对象会处于等待状态,等待了 interval 之后,开始执行 function 函数的

如果在执行函数之前的等待期间使用了 cancle 方法就会跳过执行函数结束。

def worker():
  print("hello world")
t = threading.Timer(5,worker)

“Python进程与线程怎么理解”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

原创文章,作者:3628473679,如若转载,请注明出处:https://blog.ytso.com/tech/opensource/219747.html

(0)
上一篇 2022年1月2日 12:44
下一篇 2022年1月2日 12:44

相关推荐

发表回复

登录后才能评论