num

Python多进程、多线程、协程

丶灬走出姿态 提交于 2020-01-27 08:27:35
转载:https://www.cnblogs.com/huangguifeng/p/7632799.html 首先我们来了解下python中的进程,线程以及协程! 从计算机硬件角度: 计算机的核心是CPU,承担了所有的计算任务。 一个CPU,在一个时间切片里只能运行一个程序。 从操作系统的角度: 进程和线程,都是一种CPU的执行单元。 进程:表示一个程序的上下文执行活动(打开、执行、保存...) 线程:进程执行程序时候的最小调度单位(执行a,执行b...) 一个程序至少有一个进程,一个进程至少有一个线程。 并行 和 并发: 并行:多个CPU核心,不同的程序就分配给不同的CPU来运行。可以让多个程序同时执行。 cpu1 ------------- cpu2 ------------- cpu3 ------------- cpu4 ------------- 并发:单个CPU核心,在一个时间切片里一次只能运行一个程序,如果需要运行多个程序,则串行执行。 cpu1  ----  ---- cpu1    ----  ---- 多进程/多线程: 表示可以同时执行多个任务,进程和线程的调度是由操作系统自动完成。 进程:每个进程都有自己独立的内存空间,不同进程之间的内存空间不共享。 进程之间的通信有操作系统传递,导致通讯效率低,切换开销大。 线程:一个进程可以有多个线程

Python-CCF:20190901 小明种苹果

别说谁变了你拦得住时间么 提交于 2020-01-27 06:59:51
文章目录 题目 用时 思路分析 满分代码 题目 用时 读题+分析:10min 写代码:70min 虽然是一遍过,但不是很满意,用时太长了 不过考虑到是隔了好久再做CSP,手生是正常的 毕竟和平时写爬虫写Django不一样,CSP对细节的要求更高,稍有不慎失去的可能就是几十分 所以大体来说差强人意吧 思路分析 输入分析 第一个3是指3棵苹果树 第二个3是指修剪每棵苹果树修剪3轮 这里容易受到误导,一定注意 73是指第一棵树开始时有73个苹果 -8、-6、-4分别是每轮修剪8个、6个、4个 下同 数据结构分析 每棵苹果树都有 属性:树的编号、苹果个数、被修剪苹果的总数 方法:修剪,传入参数为每次修剪的个数 很自然的想到用类和对象去写 其他注意事项 输出的编号是从1开始的,也就是说没有第0棵树这种说法,如果想用下标表示编号一定要注意 第二个输入示例中涉及到了相同元素的排序顺序,Python的sort方法是稳定的,正好符合要求 输入的修剪个数为非正数,所以定义修剪方法时要分清加减号 满分代码 class AppleTree : tree_name = 0 apples_num = 0 cut_sum = 0 def __init__ ( self , original_apples_num , tree_name ) : # 初始化一个苹果树对象时传入原有苹果个数和编号(注意:从1开始)

LeetCode──下一个排列(31)

六眼飞鱼酱① 提交于 2020-01-27 05:45:26
题目描述 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。 必须原地修改,只允许使用额外常数空间。 以下是一些例子,输入位于左侧列,其相应输出位于右侧列。 1,2,3 → 1,3,2 3,2,1 → 1,2,3 1,1,5 → 1,5,1 8,4,7,6,5,3,1 → 8,5,1,3,4,6,7 思路 1. 从后向前遍历,判断当前数组是否为降序排列 2. 已为降序排列,说明不存在下一个更大的数,则 i 为 -1,直接反转0 - (len - 1) 3. 找到第一个num[i] < num[i + 1]的元素 4. 此时 i 必定 >= 0,然后继续从后向前,寻找第一个比num[i]大的元素,与num[i]进行交换 5. 反转 i 之后的元素 比如 num 8 4 7 6 5 3 1 下标 0 1 2 3 4 5 6 num[i] < num[i + 1] i num[i] < num[j] j swap(num, i, j) 8 5 7 6 4 3 1 reverse(num, i + 1, len - 1) 8 5 1 3 4 6 7 代码: class Solution { public void nextPermutation ( int [ ] nums ) {

变量进阶

北慕城南 提交于 2020-01-27 03:54:07
01. 变量的引用 变量 和 数据 都是保存在 内存 中的 在 Python 中 函数 的 参数传递 以及 返回值 都是靠 引用 传递的 1.1 引用的概念 在 Python 中 变量 和 数据 是分开存储的 数据 保存在内存中的一个位置 变量 中保存着数据在内存中的地址 变量 中 记录数据的地址 ,就叫做 引用 使用 id() 函数可以查看变量中保存数据所在的 内存地址 注意:如果变量已经被定义,当给一个变量赋值的时候,本质上是 修改了数据的引用 变量 不再 对之前的数据引用 变量 改为 对新赋值的数据引用 1.2 变量引用 的示例 在 Python 中,变量的名字类似于 便签纸 贴在 数据 上 定义一个整数变量 a ,并且赋值为 1 代码 图示 a = 1 将变量 a 赋值为 2 代码 图示 a = 2 定义一个整数变量 b ,并且将变量 a 的值赋值给 b 代码 图示 b = a 变量 b 是第 2 个贴在数字 2 上的标签 1.3 函数的参数和返回值的传递 在 Python 中,函数的 实参 / 返回值 都是是靠 引用 来传递来的 def test(num): print("-" * 50) print("%d 在函数内的内存地址是 %x" % (num, id(num))) result = 100 print("返回值 %d 在内存中的地址是 %x" % (result

函数参数,返回值,递归函数

人走茶凉 提交于 2020-01-27 03:53:47
函数进阶 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的作用 函数根据 有没有参数 以及 有没有返回值 ,可以 相互组合 ,一共有 4 种 组合形式 无参数,无返回值 无参数,有返回值 有参数,无返回值 有参数,有返回值 定义函数时, 是否接收参数,或者是否返回结果 ,是根据 实际的功能需求 来决定的! 如果函数 内部处理的数据不确定 ,就可以将外界的数据以参数传递到函数内部 如果希望一个函数 执行完成后,向外界汇报执行结果 ,就可以增加函数的返回值 1.1 无参数,无返回值 此类函数,不接收参数,也没有返回值,应用场景如下: 只是单纯地做一件事情 ,例如 显示菜单 在函数内部 针对全局变量进行操作 ,例如: 新建名片 ,最终结果 记录在全局变量 中 注意: 如果全局变量的数据类型是一个 可变类型 ,在函数内部可以使用 方法 修改全局变量的内容 —— 变量的引用不会改变 在函数内部, 使用赋值语句 才会 修改变量的引用 1.2 无参数,有返回值 此类函数,不接收参数,但是有返回值,应用场景如下: 采集数据,例如 温度计 ,返回结果就是当前的温度,而不需要传递任何的参数 1.3 有参数,无返回值 此类函数,接收参数,没有返回值,应用场景如下: 函数内部的代码保持不变,针对 不同的参数 处理 不同的数据 例如 名片管理系统 针对

Java高级篇(一)——线程

£可爱£侵袭症+ 提交于 2020-01-27 02:54:20
  前面我们系统的了解了Java的基础知识,本篇开始将进入到Java更深层次的介绍,我们先来介绍一下Java中的一个重要的概念——线程。 一、什么是线程   在了解线程前,我们首先要了解进程的概念。进程是操作系统调度和分配资源的基本单位,进程之间的通信需要通过专门的系统机制,比如消息、socket和管道来完成。而线程是比进程更小的执行单位,每个线程拥有自己的栈和寄存器等资源数据,多个线程之间共享进程的代码、数据和文件。   那为什么要引入线程的概念?或者说线程有什么优点?   举个简单的例子,我们在使用电脑时,可以使用它听歌,可以使用它打印文件,也可以使用它看电影,而这些活动完全可以同时进行,这种思想在Java中被称为并发,线程就是并发完成的每一件事情。   线程的优点有如下几条: 创建一个线程比创建一个进程的代价要小 线程的切换比进程间的切换代价小 充分利用多处理器 数据共享(数据共享使得线程之间的通信比进程间的通信更高效) 快速响应特性(在系统繁忙的情况下,进程通过独立的线程及时响应用户的输入 )   在单线程中,程序代码按调用顺序依次往下执行,如果需要一个进程同时完成多段代码的操作,就需要产生多线程。 二、线程的实现   在Java中主要提供了两种方式实现线程,下面分别介绍一下这两种方式。   1. 继承Thread类   在Java中可通过继承java.lang

measure.label寻找最大连通域

白昼怎懂夜的黑 提交于 2020-01-27 02:49:50
网上看了几个帖子,自己试了一下,都以一点点错误和不匹配,于是自己修改了一个新的版本。用skimage.measure.label寻找最大连通域 from skimage import measure # 输入二值图像mask def largeConnectComponent(bw_image): labeled_img, num = measure.label(bw_image, neighbour, background=0, return_num=True) # 这里返回的labeled_img是一幅图像,不再是一副二值图像,有几个连通域,最大值就是几,num是连通域个数,1个连通域的话num=1 max_label = 0 max_num = 0 # 图像全黑,没有连通域num=0,或者是由一个连通域num=1,直接返回原图像 if num == 0 or num == 1: return bw_image else: for i in range(1, num+1): #注意这里的范围,为了与连通域的数值相对应 # 计算面积,保留最大面积对应的索引标签,然后返回二值化最大连通域 if np.sum(labeled_img == i) > max_num: max_num = np.sum(labeled_img == i) max_label = i lcc =

【数据结构】(邻接矩阵 | 图 | DFS)邻接矩阵深度遍历图

笑着哭i 提交于 2020-01-27 01:58:30
#include < iostream > using namespace std; #define NUM 6 // 定义图 typedef struct{ int a[NUM][NUM]; // 表示点之间的关系 int vex[NUM]; // 各点存的信息 }MGragh; // 图的初始化 void initGragh(MGragh &G, int w[][NUM], int v[]) { for(int i=0;i<NUM;i++){ //每个结点赋值!! G.vex[i] = v[i]; } for(int i=0;i<NUM;i++){ for(int j=0;j<NUM;j++){ G.a[i][j] = w[i][j]; } } } // 定义栈 typedef struct{ int data[NUM]; int top; int stacksize; }stack; // 建栈 void initstack(stack &s) { s.top = -1; s.stacksize = NUM; } // 判空 int emptystack(stack s) { if(s.top == -1) return 1; else return 0; } // 入栈 void push(stack &s,int e) { if(s.top == s.stacksize

[LeetCode] 225、用队列实现栈

五迷三道 提交于 2020-01-27 00:58:44
题目描述 用队列实现栈 参考代码 相似题目: [LeetCode] 232、用栈实现队列 ,简单题。 bool g_invalidInput = false ; class MyStack { public : /** Initialize your data structure here. */ MyStack ( ) { // nothing } /** Push element x onto stack. */ void push ( int x ) { if ( ! q1 . empty ( ) ) q1 . push ( x ) ; else q2 . push ( x ) ; } /** Removes the element on top of the stack and returns that element. */ int pop ( ) { if ( ! q1 . empty ( ) ) { int num = q1 . size ( ) ; while ( num != 1 ) { q2 . push ( q1 . front ( ) ) ; q1 . pop ( ) ; num -- ; } int res = q1 . front ( ) ; q1 . pop ( ) ; return res ; } else { int num = q2 . size

number 处理

时间秒杀一切 提交于 2020-01-27 00:19:26
/*随机数范围*/ random (min, max) { if (arguments.length === 2) { return Math.floor(min + Math.random() * ( (max+1) - min )) }else{ return null; } } /*将阿拉伯数字翻译成中文的大写数字*/ numberToChinese (num) { var AA = new Array("零", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十"); var BB = new Array("", "十", "百", "仟", "萬", "億", "点", ""); var a = ("" + num).replace(/(^0*)/g, "").split("."), k = 0, re = ""; for(var i = a[0].length - 1; i >= 0; i--) { switch(k) { case 0: re = BB[7] + re; break; case 4: if(!new RegExp("0{4}//d{" + (a[0].length - i - 1) + "}$") .test(a[0])) re = BB[4] + re; break; case 8: re = BB[5]