python多线程

015Python路--python的优缺点

和自甴很熟 提交于 2020-01-02 18:09:31
优点 Python的定位是“优雅”、“明确”、“简单”————所以Python容易学,容易编复杂项目。 开发效率非常高————Python有非常强大的第三方库,基本上你想通过计算机实现任何功能,Python官方库里都有相应的模块进行支持,直接下载调用后,在基础库的基础上再进行开发,大大降低开发周期,避免重复造轮子。 高级语言————当你用Python语言编写程序的时候,你无需考虑底层的实现细节。 可移植性————几乎可以在市场上所有的系统平台上运行。 可扩展性————如果需要一段关键代码运行得更快,或者希望某些算法不公开,可以把部分程序用C或C++编写,然后在Python程序中调用。 可嵌入性————可以把Python嵌入到C/C++程序,从而向程序用户提供脚本功能。 缺点 速度慢————Python 的运行速度相比C语言确实慢很多,跟JAVA相比也要慢一些,因此这也是很多所谓的大牛不屑于使用Python的主要原因,但其实这里所指的运行速度慢在大多数情况下用户是无法直接感知到的,必须借助测试工具才能体现出来,比如你用C运一个程序花了0.01s,用Python是0.1s,这样C语言直接比Python快了10倍,算是非常夸张了,但是你是无法直接通过肉眼感知的,因为一个正常人所能感知的时间最小单位是0.15-0.4s左右。其实在大多数情况下Python已经完全可以满足你对程序速度的要求

python之多线程

拜拜、爱过 提交于 2019-12-30 19:26:46
1、分为主线程和子线程 2、设置守护线程 setDaemon() 3、在子线程运行结束之前,主线程无法执行,子线程结束,主线程才执行 join() 备注:通过多程线的方式运行脚本,总的时间没变化 代码: #coding=utf-8 import threading from time import ctime,sleep def music(func): for i in range(2): print "I was listening to %s. %s" %(func,ctime()) sleep(1) def move(func): for i in range(2): print "I was at the %s! %s" %(func,ctime()) sleep(5) threads = [] t1 = threading.Thread(target=music,args=(u'吃饭',)) threads.append(t1) t2 = threading.Thread(target=move,args=(u'喝汤',)) threads.append(t2) if __name__ == '__main__': for t in threads: t.setDaemon(True) t.start() t.join() print "all over %s"

python多任务、进程、线程、协程笔记

[亡魂溺海] 提交于 2019-12-29 19:29:42
多任务笔记: python中多任务、进程、线程、协程: 多任务 即操作系统可以同时运行多个任务。 进程: 是对各种资源管理的集合,qq 要以一个整体的形式暴露给操作系统管理,里面包含对各种资源的调用,内存的管理,网络接口的调用等 线程: 是操作系统最小的调度单位, 是一串指令的集合。 进程要想操作CPU,就必须要创建一个线程(进程中至少包含一个线程) 具体详解见以下链接: 概念详解及代码: “”" 【多任务】 阅读下段文字,说明一下 (1)什么是任务,什么是多任务 (2)什么是进程(Process) (3)什么是线程(Thread) (4)什么是协程(Coroutine) 了解如何使用Python创建多线程应用 “”" import threading import time class MyThread ( threading . Thread ) : def __init__ ( self , name ) : threading . Thread . __init__ ( self ) self . is_run = True self . name = name def stop ( self ) : self . is_run = False def run ( self ) : for _i_ in range ( 10 ) : if not self . is_run

深入Golang调度器之GMP模型

血红的双手。 提交于 2019-12-29 19:04:21
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 前言 随着服务器硬件迭代升级,配置也越来越高。为充分利用服务器资源,并发编程也变的越来越重要。在开始之前,需要了解一下并发(concurrency)和并行(parallesim)的区别。 并发 : 逻辑上具有处理多个同时性任务的能力。 并行 : 物理上同一时刻执行多个并发任务。 通常所说的并发编程,也就是说它允许多个任务同时执行,但实际上并不一定在同一时刻被执行。在单核处理器上,通过多线程共享CPU时间片串行执行(并发非并行)。而并行则依赖于多核处理器等物理资源,让多个任务可以实现并行执行(并发且并行)。 多线程或多进程是并行的基本条件,但单线程也可以用协程(coroutine)做到并发。简单将Goroutine归纳为协程并不合适,因为它运行时会创建多个线程来执行并发任务,且任务单元可被调度到其它线程执行。这更像是多线程和协程的结合体,能最大限度提升执行效率,发挥多核处理器能力。 Go编写一个并发编程程序很简单,只需要在函数之前使用一个Go关键字就可以实现并发编程。 func main() { go func(){ fmt.Println("Hello,World!") }() } Go调度器组成 Go语言虽然使用一个Go关键字即可实现并发编程,但Goroutine被调度到后端之后,具体的实现比较复杂

聊聊IOCP,聊聊异步编程

∥☆過路亽.° 提交于 2019-12-28 03:53:23
/*--> */ /*--> */ /*--> */ /*--> */ 前言 IO完成端口(IO completion ports)在多核计算机的并行异步IO请求方面提供了一种高效的线程模型。当进程创建一个IO完成端口时,系统创建一个相关联的队列,其唯一目的是服务与那些请求。IO完成端口通常和预先分配的线程池配合,相比于一个一个创建线程,这使其更快更高效。IOCP在进程之间并不共享,一个IOCP及其句柄只和创建它的进程关联,但是一个进程中的多个线程可共享。IOCP最关键的地方就是,IOCP在IO请求和接收动作完成之后,激活线程池中的任意线程继续操作,而不是在IO请求和接受完成之后,激活原等待中的线程。这样的好处是防止等待线程闲置,和必须激活/切换到原等待线程的开销。 大多应用存在的问题 曾见过很多服务,几台,几十台,几百台服务器的,它们cpu大多数时间处于空闲状态,也许需要大量计算的应用并没有那么多,我们常见的应用大多主要读写关系数据库,读写内存数据库/缓存,RPC调用接口。IO耗时过多,CPU大量闲置,导致没看到服务器资源大量消耗,便已不能承受日益增加的访问量,再加服务器,依然大量浪费了资源。 CPU资源昂贵,每一个核心,同一时刻只能有一个线程在运行,超线程cpu同一时刻可以有两个逻辑线程运行,所以说线程不是创建的越多越好,过多的线程只会增加线程切换带来的成本。试想一下

python函数

こ雲淡風輕ζ 提交于 2019-12-27 09:52:38
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。 函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。 定义一个函数 你可以定义一个由自己想要功能的函数,以下是简单的规则: 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 () 。 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。 函数内容以冒号起始,并且缩进。 return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。 def ChangeInt(a): a = 10 b = 2 ChangeInt(b) print(b) def changeme(mylist): "修改传入的列表" mylist.append([1, 2, 3, 4]) print("函数内取值: ", mylist) return # 调用changeme函数 mylist = [10, 20, 30] changeme(mylist) print("函数外取值: ", mylist) def printme(str): "打印任何传入的字符串" print(str) return #

python-多线程创建以及查看

久未见 提交于 2019-12-27 06:14:12
import threadingimport timedef test1(): for i in range(5): print('---test1----{}'.format(i)) time.sleep(1)def test2(): for i in range(10): print('---test2----{}'.format(i)) time.sleep(1)def main(): t1 = threading.Thread(target=test1) # 调用Thread, 创建线程的对象,不会创建线程 t2 = threading.Thread(target=test2) t1.start() # 调用Thread创建出来的实例对象的start方法的时候,才会创建线程以及让这个线程开始运行 t2.start() while True: print(threading.enumerate()) # 查看正在执行的线程 if len(threading.enumerate()) <= 1: # 当只剩下主线程时退出 break time.sleep(1)if __name__ == '__main__': main() 来源: https://www.cnblogs.com/fuyouqiang/p/11769756.html

python多线程和多进程(二)

六月ゝ 毕业季﹏ 提交于 2019-12-26 23:45:16
---恢复内容开始--- 一、多进程    1、multiprocessing模块用来开启子进程,并在子进程中执行我们定制的任务(比如函数),该模块与多线程模块threading的编程接口类似。 import time from multiprocessing import Process def func(name): print('%s 函数开始,time:%s' %(name,time.ctime())) # time.sleep(2) print('%s 函数结束,time:%s' %(name,time.ctime())) if __name__ == "__main__": p1=Process(target=func,args=('one',)) p2=Process(target=func,args=('two',)) p3=Process(target=func,args=('three',)) p4=Process(target=func,args=('four',)) p5 = Process(target=func, args=('five',)) p1.start() p2.start() p3.start() p4.start() p5.start() print(u'主进程%s'%time.ctime())结果: one 函数开始,time:Sat

python 多线程编程

时光怂恿深爱的人放手 提交于 2019-12-26 22:31:16
一)线程基础 1、创建线程: thread模块提供了start_new_thread函数,用以创建线程。start_new_thread函数成功创建后还能够对其进行操作。 其函数原型: start_new_thread(function,atgs[,kwargs]) 其參数含义例如以下: function: 在线程中运行的函数名 args:元组形式的參数列表。 kwargs: 可选參数,以字典的形式指定參数 方法一:通过使用thread模块中的函数创建新线程。 >>> import thread >>> def run(n): for i in range(n): print i >>> thread.start_new_thread(run,(4,)) #注意第二个參数一定要是元组的形式 53840 1 >>> 2 3 KeyboardInterrupt >>> thread.start_new_thread(run,(2,)) 17840 1 >>> thread.start_new_thread(run,(),{'n':4}) 39720 1 >>> 2 3 thread.start_new_thread(run,(),{'n':3}) 32480 1 >>> 2 方法二:通过继承threading.Thread创建线程 >>> import threading >>>

Python多线程3:queue

孤街醉人 提交于 2019-12-26 15:17:35
queue模块实现了多生产者。多消费者队列。在多线程环境下,该队列能实现多个线程间安全的信息交换。 queue模块介绍 模块实现了3种类型的队列,差别在于队列中条目检索的顺序不同。 在FIFO队列中。依照先进先出的顺序检索条目。在LIFO队列中,最后加入的条目最先检索到(操作类似一个栈)。在优先级队列中,条目被保存为有序的(使用heapq模块)而且最小值的条目被最先检索。 queue模块定义了以下的类和异常: class queue.Queue(maxsize=0) FIFO队列的构造器。maxsize为一个整数。表示队列的最大条目数。一旦队列满,插入将被堵塞直到队列中存在空暇空间。假设maxsize小于等于0。队列大小为无限。 class queue.LifoQueue(maxsize=0) LIFO队列的构造器。 maxsize是一个整数,表示队列的最大条目数。一旦队列满,插入将被堵塞直到队列中存在空暇空间。假设maxsize小于等于0,队列大小为无限。 class queue.PriorityQueue(maxsize=0) 优先级队列的构造器。maxsize是一个整数,表示队列的最大条目数。一旦队列满,插入将被堵塞直到队列中存在空暇空间。 假设maxsize小于等于0,队列大小为无限。 最小值的条目被最先检索到(最小值的条目即为被sorted(list(entries))