day9 python学习随笔

一、threading

问答:

  • 应用程序、进程、线程关系?
  • 为什么要使用多个CPU ?
  • 为什么要使用多线程?
  • 为什么要使用多进程?
  • java和C#中的多线程和python多线程的区别?
  • Python GIL?
  • 线程和进程的选择:计算密集型和IO密集型程序。(IO操作不占用CPU)

1、Python线程

Threading用于提供线程相关的操作,线程是应用程序中工作的最小单元。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import threading
import time
 
def show(arg):
    time.sleep(1)
    print ‘thread‘+str(arg)
 
for i in range(10):
    t = threading.Thread(target=show, args=(i,))
    t.start()
 
print ‘main thread stop‘

上述代码创建了10个“前台”线程,然后控制器就交给了CPU,CPU根据指定算法进行调度,分片执行指令。

更多方法:

  • start            线程准备就绪,等待CPU调度
  • setName      为线程设置名称
  • getName      获取线程名称
  • setDaemon   设置为后台线程或前台线程(默认)
                       如果是后台线程,主线程执行过程中,后台线程也在进行,主线程执行完毕后,后台线程不论成功与否,均停止
                        如果是前台线程,主线程执行过程中,前台线程也在进行,主线程执行完毕后,等待前台线程也执行完成后,程序停止
  • join               逐个执行每个线程,执行完毕后继续往下执行...
  • run              线程被cpu调度后执行此方法

2、线程锁

由于线程之间是进行随机调度,并且每个线程可能只执行n条执行之后,CPU接着执行其他线程。所以,可能出现如下问题:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import threading
import time

gl_num = 0

def show(arg):
    global gl_num
    time.sleep(1)
    gl_num +=1
    print gl_num

for i in range(10):
    t = threading.Thread(target=show, args=(i,))
    t.start()

print ‘main thread stop‘

未使用线程锁
#!/usr/bin/env python
#coding:utf-8
  
import threading
import time
  
gl_num = 0
  
lock = threading.RLock()
  
def Func():
    lock.acquire()
    global gl_num
    gl_num +=1
    time.sleep(1)
    print gl_num
    lock.release()
      
for i in range(10):
    t = threading.Thread(target=Func)
    t.start()
时间: 2024-10-11 16:52:11

day9 python学习随笔的相关文章

python学习随笔_简介

编译型:把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快: 解释型:只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快. 2.编译型vs解释型 编译型优点:编译器一般会有预编译的过程对代码进行优化.因为编译只做一次,运行时不需要编译,所以编译型语言的程序执行效率高.可以脱离语言环境独立运行.缺点:编译之后如果需要修改就需要整个模块重新编译.编译的时候根据对应的运行环境生成机器码,不同的

Python学习随笔_2_基础:列表、元组

一.列表 列表是Python 最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作. 1.定义列表 1 names = ["Cz","Cao","Zhang","Hui","Yang"] 2 print(names) 2.元素访问:通过下标 1 >>> names = ["Cz","Cao","Zhang",&qu

python学习随笔(二)

今天主要是用户输入输出,字符拼接. 在python中,多行注释是3个单引号或双引号 单行注释是#号开头,如下. ''' name = "xiaoming" print(name) ''' # name = "xiaoming". 在python中单双引号作用一样,除非是一个语句中怕单引号或双引号太多,字符不清,才回采用单双引号,如下. print("i'm xiaoming")    %s 是字符串 ,%d 是数字, %f 是浮点数,如下:  

python学习随笔(三)

三.字典学习 1 #创建一个字典,键可以是一个数字或者一个字符串,值可以为数字.字符串.列表.字典等 2 dict1 = dict({'z':'sw'}) 3 4 #或者 5 dict2 = {'z':'sw'} 1 #清空列表中的元素 2 dict1 = dict({'z':'sw'}) 3 dict1.clear() 4 print(dict1) --> {} 1 #复制一个字典 2 dict1 = dict({'z':'sw'}) 3 dict2 = dict1.copy() 4 prin

python学习随笔

费解,同样安装python27,实验室的电脑上图形界面可以打开,自己的电脑怎么弄都打不开.看来还是太弱鸡. **************python容器类型***************** list:如下定义:(python中有数组类型,但是仅能存放一种类型的数据,循环时性能优于list) dictionary:存放无序键值映射.键的类型可以是数字或字符串 set:由不同元素组成的合集.集合之间支持一些数学运算.并,交,补 *****************************控制结构**

day6 python学习随笔。

序列化 工具有json,pickle. 用于把复杂的数据类型转换成字符串. #json必须是 key,value的数据类型. #pickle仅限python使用支持python大部分数据类型. 2.日志模块 3.执行命令模块 可以执行shell命令的相关模块和函数有: os.system os.spawn* os.popen*          --废弃 popen2.*           --废弃 commands.*      --废弃,3.x中被移除 以上执行shell命令的相关的模块和

python学习随笔(一)

一.字符串学习 1 #创建一个字符串方法 2 str1 = 'abc' 3 #或者 4 str1 = str('abc) 1 1 #字符串首字母小写变为大写,原来为大写不变 2 2 str2 = str1.captilize() 3 3 print(str2) --> Abc 1 #字符串首字母大写变为小写,小写不变 2 str1 = 'Abc' 3 str2 = str1.casefold() 4 print(str2) --> abc 1 #字符串剧中,第一个参数为设置字符串宽度,第二个参

python学习随笔--django 上

Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. 基本配置 一.创建django程序 终端命令:django-admin startproject sitename IDE创建Django程序时,本质上都是自动执行上述命令 其他常用命令: python manage.py runserver 0.0.0.0 python manage.py st

python学习随笔(细节总结)

1.十六进制用0x前缀和0-9,a-f表示eg:0xff00 2.字符串是以''或""括起来的任意文本eg:'abc',"xyz" 3.在python中,变量名必须是大小写英文.数字和下划线(_)的组合,且不能用数字开头 4.定义字符串时,如果字符串中本身包含既包含  '  又包含  "  时, 字符串中包含  ' 时,可以用 " " 括起来  eg:I'm OK  ====>  "I'm OK" 字符串中包含