Python_线程、线程效率测试、数据隔离测试、主线程和子线程

0、进程中的概念

  三状态:就绪、运行、阻塞

    就绪(Ready):当进程已分配到除CPU以外的所有必要资源,只要获得处理机便可立即执行,这时的进程状态成为就绪状态.

    执行/运行(Running)状态:当进程已获得处理机,其程序正在处理机上执行,此时的进程状态成为执行状态.

    阻塞(Blocked)状态正在执行的进程,由于等待某个事件发生而无法执行时,便放弃处理机而处于阻塞状态.引起进程阻塞的事件可有多种,例如,等待I/O完成、申请缓冲区不能满足、等待信件(信号)等.

  同步:一个任务的完成需要依赖另外一个任务时,只有等待被依赖的任务完成后,依赖的任务才能算完成,这是一种可靠的任务序列。要么成功都成功,失败都失败,两个任务的状态可以保持一致。

  异步:不需要等待被依赖的任务完成,只是通知被依赖的任务要完成什么工作,依赖的任务也立即执行,只要完成了整个任务就算完成了。至于被依赖的任务最终是否真正完成,依赖他的任务无法确定,所以是不可靠的任务序列。

    

  进程是计算机中最小的资源分配单位。

  基础的进行开启:    

 1 import time
 2 from multiprocessing import Process
 3
 4 def f(name):
 5     print(‘hello‘, name)
 6     print(‘我是子进程‘)
 7
 8 if __name__ == ‘__main__‘:
 9     p = Process(target=f, args=(‘bob‘,))
10     p.start()
11     time.sleep(1)
12     print(‘执行主进程了‘)

子进程的开启

1 D:\Python36\python.exe E:/Python/草稿纸.py
2 hello bob
3 我是子进程
4 执行主进程了
5
6 Process finished with exit code 0

结果

  锁 —— 互斥锁

  信号量 —— 锁 + 计数器

  事件 —— Python线程的事件用于主线程控制其他线程的执行,事件主要提供了三个方法set、wait、clear。

    事件处理的机制:全局定义了一个‘Flag’,如果‘Flag’值为False,那么当程序event.wait方法时就会阻塞,如果‘Flag‘值为True,那么event,wait方法便不再阻塞.

    clear:将‘Flag‘设置为False.

    set:将‘Flag‘设置为True.

1、线程

2、线程效率测试

3、数据隔离测试

4、主线程和子线程

原文地址:https://www.cnblogs.com/ZN-225/p/9188523.html

时间: 2024-10-12 19:43:44

Python_线程、线程效率测试、数据隔离测试、主线程和子线程的相关文章

Android笔记(三十二) Android中线程之间的通信(四)主线程给子线程发送消息

之前的例子都是我们在子线程(WorkerThread)当中处理并发送消息,然后在主线程(UI线程)中获取消息并修改UI,那么可以不可以在由主线程发送消息,子线程接收呢?我们按照之前的思路写一下代码: package cn.lixyz.handlertest; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import andr

(转)C#/.NET主线程与子线程之间的关系

一般 一个应用程序就对应一个进程,一个进程可有一个或多个线程,而一般有一个主线程. 有的博客上说“至少一个主线程”,这一说法持有怀疑         主线程与子线程之间的关系         **默认情况,在新开启一个子线程的时候,他是前台线程,只有,将线程的IsBackground属性设为true;他才是后台线程         *当子线程是前台线程,则主线程结束并不影响其他线程的执行,只有所有前台线程都结束,程序结束         *当子线程是后台线程,则主线程的结束,会导致子线程的强迫结

在C#中主线程和子线程如何实现互相传递数据

在C#中主线程和子线程如何实现互相传递数据 老帅 在C#中创建线程Thread时,可以有多种方法,而主线程和子线程之间又如何实现互相传递数据,每种创建方法传递参数的效果是不同的,逐一看一下:  一.不带参数创建Thread 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 using System;  using System.Collections.Generic;  using System.Text;  using Sy

在C#中主线程和子线程如何实现互相传递数据(转)

在C#中创建线程Thread时,可以有多种方法,而主线程和子线程之间又如何实现互相传递数据,每种创建方法传递参数的效果是不同的,逐一看一下: 一.不带参数创建Thread 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 using System;  using System.Collections.Generic;  using System.Text;  using System.Threading;  namespace

C#主线程等待子线程运行结束

佐左佑右 原文 C#主线程等待子线程运行结束 由于主程序中调用matlab的dll文件进行计算要用较长的时间,主界面会有很长时间的卡顿,造成的用户感受十分不好,因此我想在调用时,将调用放入子线程中,然后在主线程中弹出一个提示框,显示数据正在加载,等子线程运行结束后,主线程继续工作. 使用的是http://hi.baidu.com/oktell/item/5527f51d93abb4a5feded5a8中所提到的方法,用了这篇文章中的第一个方式,即不带参数的. 之后在其中加入了显示和关闭提示框的代

Java并发编程原理与实战六:主线程等待子线程解决方案

本文将研究的是主线程等待所有子线程执行完成之后再继续往下执行的解决方案 public class TestThread extends Thread { public void run() { System.out.println(this.getName() + "子线程开始"); try { // 子线程休眠五秒 Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } System.

Android主线程、子线程通信(Thread+handler)

Android是基于Java的,所以也分主线程,子线程! 主线程:实现业务逻辑.UI绘制更新.各子线程串连,类似于将军: 子线程:完成耗时(联网取数据.SD卡数据加载.后台长时间运行)操作,类似于小兵: 一.子线程向主线程发消息(Thread+handler): 1.主线程中定义Handler: Java代码   Handler mHandler = new Handler(){ @Override public void handleMessage(Message msg) { super.h

[C#参考]主线程和子线程之间的参数传递

几个进程在大多数情况下要包含很多的子线程,那么他们之间免不了的要互相传递很多的参数,那么参数怎么传递的呢? 主线程向子线程传递参数的方法 第一种方法:Thraed类有一个带参数的委托类型的重载形式,这个委托的定义如下: public delegate void ParameterizedThreadStart(Object obj) 这个Thread类的构造方法的定义如下: public Thread(ParameterizedThreadStart start); 下面的代码使用了这个带参数的

Android线程之主线程向子线程发送消息

和大家一起探讨Android线程已经有些日子了,谈的最多的就是如何把子线程中的数据发送给主线程进行处理,进行UI界面的更新,为什么要这样,请查阅之前的随笔.本篇我们就来讨论一下关于主线程向子线程如何发送数据,这个用的地方也是非常的多,例如当我们为了优化用户体验,我们会在不影响用户使用的情况下进行后台数据更新,好了废话不多说,开始我们今天的讨论. public class ThreadActivity extends Activity implements OnClickListener{ pri