def

Python线程

不想你离开。 提交于 2020-11-11 07:54:04
线程 线程被称作轻量级进程。与进程类似,不过它们是在同一个进程下执行的。 并且它们会共享相同的上下文。 每一个进程中至少有一个线程。 顾名思义,线程就是一条流水线工作的过程,一条流水线必须属于一个车间,一个车间的工作过程是一个进程 所以, 进程只是用来把资源集中到一起(进程只是一个资源单位,或者说资源集合),而线程才是cpu上的执行单位。  多线程(即多个控制线程)的概念是,在一个进程中存在多个控制线程,多个控制线程共享该进程的地址空间,相当于一个车间内有多条流水线,都共用一个车间的资源。(一个进程里面开多个线程(共享同一个进程里面的内存空间)) 进程和线程的关系 1.创建线程比进程开销小(开一个进程,里面就有空间了,而线程在进程里面,就没必要在开一个空间了)   如果我们的软件是一个工厂,该工厂有多条流水线,流水线工作需要电源,电源只有一个即cpu(单核cpu)   一个车间就是一个进程,一个车间至少一条流水线(一个进程至少一个线程)创建一个进程,就是创建一个车间(申请空间,在该空间内建至少一条流水线)   而建线程,就只是在一个车间内造一条流水线,无需申请空间,所以创建开销小 2.多线程一定是在一个进程里面开启的,共享进程里面的资源 3.线程启动的速度快 4.同一进程下的多个线程共享进程的资源,而多个进程之间内存空间是隔离的 多线程 多线程指的是,在一个进程中开启多个线程,

Scala的函数

纵然是瞬间 提交于 2020-11-11 06:07:34
Scala的函数 1、 函数的声明 scala函数通过def关键字定义,def前面可以具有修饰符,可以通过private、protected来控制其访问权限。 注意:没有public,不写默认就是public的。此外也可跟上override,final等关键字修饰。 1. 格式 [private/protected] def 函数名(参数列表):返回值声明 = {函数体} 2. 函数的返回值 1)函数体中return关键字往往可以省略掉,一旦省略掉,函数将会返回整个函数体中最后一行表达式的值,这也要求整个函数体的最后一行必须是正确类型的值的表达式。 2)大部分时候scala都可以通过=符号来自动推断出返回值的类型,所以通常返回值类型声明可以省略。 但是注意:如果因为省略了返回值类型造成歧义,则一定要写上返回值声明。 3)如果函数体只有一行内容,则包裹函数体的大括号可以省略。 4)如果返回值类型是UNIT,则另一种写法是可以去掉返回值类型和等号,把方法体写在花括号内,而这时方法内无论返回什么,返回值都是UNIT。相当于Java中的void。 示例: //方法的返回值为空 private def f1(){} protected def f2():String={"hello"} def f3()={"hello"} //如果函数体只一行内容,可以省了花括号 def f4()=

Scala函数

被刻印的时光 ゝ 提交于 2020-11-11 06:07:05
一、方法 方法定义 Scala中 + - * / % 的作用和Java一样,但是特别的是,这些操作符实际上是方法。 1 to 10 1.to(10 ) def m2(a:Int,b:Int): Int = a * b def m1(a:Int,b:Int):Int = { a + b } def:定义方法的关键字 m1:方法名 a:参数列表 b:参数列表 Int:返回值类型 a + b:函数体 二、函数 1 )方式1 方法转换为函数 方式:方法名 _ res6: (Int, Int) => Int = <function2> <function2> 代表一个函数,并且有两个参数。 (Int, Int) 代表参数列表 Int 代表返回值类型 => 代表函数 2 )方式2 定义函数: val h1 = (a:Int,b:Int) => {a * b} h1:函数名 (a:Int,b:Int):函数的参数类型 {a * b}:函数体 1、函数使用例子: // 1、定义方法m2计算a和b的积 scala> def m2(a:Int,b:Int):Int = a * b m2: (a: Int, b: Int)Int // 2、调用方法m2 scala> m2(4,6 ) res21: Int = 24 // 3、方法m2转换为函数 scala> m2 _ res22: (Int, Int)

Python 数据类型:字符串

自作多情 提交于 2020-11-11 05:22:37
一、字符串介绍 字符串是由单引号/双引号/三引号引起来的,由字母 、数字或符号等构成的一串字符 In [1]: name = " Tom " # 定义字符串 In [ 2]: type(name) # 字符串的英文缩写为str Out[2]: str 单引号 、双引号 、三引号的区别: 1. 在 python 中,单引号与双引号没什么区别,三个单引号和三个双引号也没什么区别,效果是一样的,都可以定义一个字符串 2. 单引号或双引号定义换行时,需要使用 " \n " 来实现,而三引号则可以直接回车来换行,这是三引号的不同之处 3. 三引号除了能换行定义字符串之外,还能用作多行注释,在 python 程序中,"#" 只能注释单行,而三引号则可以注释多行 4. 如下例子中,用四种方法定义的字符串,结果都是一样的 In [1]: info = ' My name is Tom.\nI like reading. ' # 用单引号定义字符串 In [ 2]: info = " My name is Tom.\nI like reading. " # 用双引号定义字符串 In [ 3]: info = ''' My name is Tom. # 用三个单引号定义字符串 ...: I like reading. ''' In [ 4]: info = """ My name is Tom. #

[LeetCode] 221. Maximal Square 最大正方形

时间秒杀一切 提交于 2020-11-11 04:31:55
Given a 2D binary matrix filled with 0's and 1's, find the largest square containing only 1's and return its area. For example, given the following matrix: 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 Return 4. Credits: Special thanks to @Freezen for adding this problem and creating all test cases. 给一个2维的01矩阵,找出最大只含有1的正方形,返回它的面积。 解法1: Brute force,对于矩阵中的每一个为1的点,都把它当作正方形的左上角,然后判断不同大小的正方形内的点是不是都为1。 解法2: DP,对于第一种的解法肯定有很多的重复计算,所以可以用DP的方法,把某一点能组成的最大正方形记录下来。 Python: DP class Solution: # @param {character[][]} matrix # @return {integer} def maximalSquare(self, matrix): if not matrix: return 0 m, n = len

学习PyQt5(三):PyQt5的信号和槽

萝らか妹 提交于 2020-11-11 04:30:09
我 如图所示,我们创建一个按钮及一个浏览器。 什么是信号?比如按钮的单击,双击,按下,释放等,都可以认为是一个信号 什么是槽? 对应的信号,做出什么应对,这要一个应对在一个函数中,我们可以认为这就是一个信号/槽关系 在Qt Designer中点击工具栏(注意不是工具盒)中的这个图标 点击这个图标后,就进入了编辑信号/槽的状态,这个时候我们把鼠标放在放在组件上会有红色选中状态。 点击拉向空白处,会出现上图情况,这种情况是自定义槽,也可指向另一个控件俩着相关联。 我们点击编译会出现槽/信号框,点击添加按钮,添加自定义的函数。 同时我们也可以在右下角的信号/槽编译器处,编译和修改 保存创建的UI,会在路径下生成一个.ui的文件, 点击PyUIC运行,会自动生成一个test_ui.py文件,打开此文件会发现 self.pushButton.clicked.connect(MainWindow.test_1) 这行代码,这就是我们前面编译的信号/槽在代码中的体现,所有,我们也可以在代码中自己编写 编辑主文件 from PyQt5 import QtWidgets from test_ui import Ui_MainWidow class MyWindow(QtWidgets.QWidget,Ui_MainWindow): def __init__ (self): super

Django学习之django自带的contentType表 GenericRelation GenericForeignKey

流过昼夜 提交于 2020-11-10 08:04:34
Django学习之django自带的contentType表     通过django的contentType表来搞定一个表里面有多个外键的简单处理: 摘自: https://blog.csdn.net/aaronthon/article/details/81714496     contenttypes 是Django内置的一个应用,可以追踪项目中所有app和model的对应关系,并记录在ContentType表中。     models.py文件的表结构写好后,通过makemigrations和migrate两条命令迁移数据后,在数据库中会自动生成一个django_content_type表,比如我们有在models.py中写了这么几张表: from django.db import models class Electrics(models.Model): """ id name 1 日立冰箱 2 三星电视 3 小天鹅洗衣机 """ name = models.CharField(max_length=32) class Foods(models.Model): """ id name 1 面包 2 烤鸭 """ name = models.CharField(max_length=32) class Clothes(models.Model): name = models

python3 线程池-threadpool模块与concurrent.futures模块

守給你的承諾、 提交于 2020-11-10 07:51:57
多种方法实现 python 线程池 一、 既然多线程可以缩短程序运行时间,那么,是不是线程数量越多越好呢? 显然,并不是,每一个线程的从生成到消亡也是需要时间和资源的,太多的线程会占用过多的系统资源(内存开销,cpu开销),而且生成太多的线程时间也是可观的,很可能会得不偿失,这里给出一个最佳线程数量的计算方式: 最佳线程数的获取: 1、通过用户慢慢递增来进行性能压测,观察QPS(即每秒的响应请求数,也即是最大吞吐能力。),响应时间 2、根据公式计算:服务器端最佳线程数量=((线程等待时间+线程cpu时间)/线程cpu时间) * cpu数量 3、单用户压测,查看CPU的消耗,然后直接乘以百分比,再进行压测,一般这个值的附近应该就是最佳线程数量。 二、为什么要使用线程池? 对于任务数量不断增加的程序,每有一个任务就生成一个线程,最终会导致线程数量的失控,例如,整站爬虫,假设初始只有一个链接a,那么,这个时候只启动一个线程,运行之后,得到这个链接对应页面上的b,c,d,,,等等新的链接,作为新任务,这个时候,就要为这些新的链接生成新的线程,线程数量暴涨。在之后的运行中,线程数量还会不停的增加,完全无法控制。所以,对于任务数量不端增加的程序,固定线程数量的线程池是必要的。 三、如何实现线程池? 这里,我分别介绍三种实现方式: 1、过去: 使用threadpool模块

python并发模块之concurrent.futures(一)

旧城冷巷雨未停 提交于 2020-11-10 07:28:22
Python3.2开始,标准库为我们提供了concurrent.futures模块,它提供了ThreadPoolExecutor和ProcessPoolExecutor两个类,实现了对threading和multiprocessing的进一步抽象,对编写线程池/进程池提供了直接的支持,他属于上层的封装,对于用户来说,不用在考虑那么多东西了。 官方参考资料:https://pythonhosted.org/futures/ 1.Executor Exectuor是基础模块,这是一个抽象类,其子类分为ThreadPoolExecutor和ProcessPoolExecutor,分别被用来创建线程池和进程池。 提供的方法如下: Executor.submit(fn, *args, **kwargs) fn:为需要异步执行的函数 args,kwargs:为给函数传递的参数 就来看看官网的这个例子: with ThreadPoolExecutor(max_workers=1) as executor: future = executor.submit(pow, 323, 1235) print(future.result())    我们使用submit方法来往线程池中加入一个task(pow函数),submit返回一个Future对象。其中future.result(

python_MySQL数据库

戏子无情 提交于 2020-11-10 07:14:25
MySQL数据库的特点: 1、是关系型数据库 关系型数据库的特点 1、数据是以行和列的的形式存储的 2、这一系列的行和列称为表 3、表中的每一行叫做记录 4、表中的每一列叫做字段 5、表和表之间的逻辑关联叫做关系 6、关系型数据库的核心内容是:关系 即二维表 示例: 1、关系型数据库存储 表1:学生信息表 姓名 年龄 班级 aa 20 1712 bb 25 1713 表2:班级信息表 班级 班主任 1712 曹操 1713 刘备 说明:要找到学生aa的班主任是谁,需要通过班级字段来找到班主任 2、非关系型数据库存储(是以键值对的形式存储的) {姓名:“aa”,年龄:20,班级:1712,班主任:“曹操”} 二者之间的比较: 非关系行数据的性能比较高(查找数据的速度)但是会造成数据的冗余 2、跨平台 可以在Unix、Linux、Windows上运行MySQL服务 3、支持多种语言编程语言 4、是基于硬盘的读写 MySQL的安装: 1、Linux系统下安装MySQL服务 1、安装服务端:sudo apt-get install mysql-server 2、安装客户端:sudo apt-get install mysql-client 3、初始的用户名和密码在/etc/mysql/debian.cnf文件中,使用 cd /etc/mysql/ 进去目录,subl debian.cnf