@ 目录 1.多任务的概念 2.线程 1.多任务的概念 "多任务工作"指的是当前很普遍的工作状态,一个人同时处理多件事情,比如以下这个常见的画面:写一会报告,刷一下网页,查一下资料,收一下邮件,回去做一下数据,点开微信回应一下,再回去贴图表--诸如此类.今天这个时代,专注在一件事情上,已经近乎不可能了.每个人手上都有一大堆任务,同时开着Word.Excel.PPT,微信和QQ总是同时闪动好几个头像--似乎,不能同时处理这些事情,就是能力不够. 2.线程 python的thread模块是…
下面内容是关于python中thread的setDaemon.join的用法的内容. #! /usr/bin/env python import threading import time class myThread(threading.Thread): def __init__(self, threadname): threading.Thread.__init__(self, name=threadname) self.st = 2 def run(self): time.sleep(se…
多任务-python实现-协程(2.1.11) 23/100 发布文章 qq_26624329 @ 目录 1.概念 2.迭代器 1.概念 协程与子例程一样,协程(coroutine)也是一种程序组件.相对子例程而言,协程更为一般和灵活,但在实践中使用没有子例程那样广泛.协程源自 Simula 和 Modula-2 语言,但也有其他语言支持.在python中支持 但在c和c++没有这个概念 2.迭代器 迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器…
@ 目录 1.thread类 1.thread类 threding代码实现 import threading import time class MyThread(threading.Thread): def run(self): for i in range(3): time.sleep(1) msg ="i am "+ self.name + "@" +str(i) print(msg) if __name__ == '__main__': t = MyThre…
Python多线程(一) Python多线程,类似于同时执行多个不同程序,多线程运行的有点: 1.使用线程可以把占据长时间的程序中的任务放到后台去处理 2.用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度 3.程序的运行速度可能加快 4.在一些等待的任务实现上如用户输入.文件读写和网络收发数据等,线程就比较有用了.在这种情况下我们可以释放一些珍贵的资源如内存占用等 西城在执行过程中与进程还是有区别的.每个独立的进程有一个程序运行的入口.顺…
thread 在数据预处理的时候用处不大,因为有GIL 锁 查看thread信息 import threading print(threading.current_thread()) print(threading.enumerate()) print(threading.active_count()) 定义thread job并开启 def thread_job(): print("this is added thread,number is %s"%(threading.curre…
之前对Daemon线程理解有偏差,特记录说明: 一.什么是Daemon A thread can be flagged as a "daemon thread". The significance of this flag is that the entire Python program exits when only daemon threads are left. The initial value is inherited from the creating thread. T…
Thread 是threading模块中最重要的类之一,可以使用它来创建线程.有两种方式来创建线程:一种是通过继承Thread类,重写它的run方法:另一种是创建一个threading.Thread对象,在它的初始化函数(__init__)中将可调用对象作为参数传入.下面分别举例说明.先来看看通过继承threading.Thread类来创建线程的例子:           Python   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21…
#coding:utf-8#多线程#Python的标准库提供了两个模块:thread和threading,thread是低级模块,threading是高级模块,对thread进行了封装 #绝大数情况下,我们只需要使用threading这个高级模块#启动一个线程就是把一个函数传入并创建Thread实例,然后调用start()开始执行 import time,threading def loop(): print 'thread %s is runing...' % threading.curren…
python提供了多种模块用来支持多线程编程, thread(在python3中改名为_thread),threading,和 queue模块. 通过加入queue模块,用户可以创建多个线程共享数据的队列数据结构. thread和threading模块都可以用来创建和管理线程,而thread模块提供了基本的线程和锁支持. threading提供的是更高级的完全的线程管理. 低级别的thread模块是推荐给高手用,一般应用程序推荐使用更高级的threading模块: 1.它更先进,有完善的线程管理…
1.epoll用到了文件描述符的概念: 首先,操作系统中一切皆文件 文件与文件描述符fd 文件是应用程序与系统(包括特定硬件设备)之间的桥梁,而文件描述符就是应用程序使用这个"桥梁"的接口. socket底层也是一个文件,socket.fileno()可以获得socket的文件描述符 2.select与epoll: select:采用轮询的方式,客户端越多效率越低:需要将fd传入内核空间,内核处理后返回 epoll:采用时间触发式,效率很高:epoll是用户空间和内核空间共用的,所以不…
@ 目录 1.说明 2.代码 关于作者 1.说明 上个博文携程实现的多任务 依然是一个进程,一个线程,只不过执行了不同的代码部分 这里使用gevent,或者greenlet 当gevent执行的时候遇到gevent.sleep(time)就会切换执行 2.代码 import gevent def f1(n): for i in range(n): print(gevent.getcurrent(),i) gevent.sleep(0.5) def f2(n): for i in range(n)…
@ 目录 1.概念 2.创建方法 3.通过send方式来启动 1.概念 通过列表生成式,我们可以直接创建一个列表,但是,受到内存限制,列表容量肯定是有限的,而且创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了. 所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间,在Python中,这种一边循环一边计算的机制,称为生成器:…
@ 目录 1.需求 2.代码 1.需求 当去拷贝一个文件夹的所有文件时,使用多任务拷贝 假如一个文件使用一个进程处理 10000个文件就额可以使用最大值为10的进程池处理(当然max取值看具体主机性能) 提高工作效率 2.代码 import multiprocessing import os import time import random def copy_file(queue, file_name,source_folder_name, dest_folder_name): ""…
@ 目录 1. 概念 2.python代码实现 1. 概念 当需要创建的子进程数量不多时,可以直接利用multiprocessing中的Process动态成生多个进程,但如果是上百甚至上千个目标,手动的去创建进程的工作量巨大,此时就可以用到multiprocessing模块提供的Pool方法. 初始化Pool时,可以指定一个最大进程数,当有新的请求提交到Pool中时,如果池还没有满,那么就会创建一个新的进程用来执行该请求:但如果池中的进程数已经达到指定的最大值,那么该请求就会等待,直到池中有进程…
@ 目录 1.为什么要使用队列 2.python代码实现 1.为什么要使用队列 进程之间是互相独立的,而线程能够共享全局变量 所以如果进程间想要交换数据的话 只有通过进程间的通信,比如socket.太麻烦 在这里使用队列 队列的特点:先进先出 2.python代码实现 import multiprocessing def download_from_web(q): """下载数据""" #模拟从网上下载数据 data = [11,22,33,44…
@ 目录 1.进程是什么 2.进程的生命周期 3.Python中多进程的实现 4.进程和线程的区别 1.进程是什么 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构中,进程是程序的基本执行实体:在当代面向线程设计的计算机结构中,进程是线程的容器.程序是指令.数据及其组织形式的描述,进程是程序的实体. 2.进程的生命周期 3.Python中多进程的实现 代码实现 import time i…
@ 目录 1.案例 1.案例 代码实现 import threading import time import socket def rev_msg(udp_socket): while True: recv_data = udp_socket.recvfrom(1024) print("接来自%s收到的数据:%s" % (str(recv_data[1]),recv_data[0].decode("utf-8"))) def send_msg(udp_socket…
@ 目录 1.同步的概念 2.解决线程同时修改全局变量的方式 3.互斥锁 1.同步的概念 同步就是协同步调,按照预定的先后次序进行运行,如你说完我在说 同步在子面上容易理解为一起工作 其实不是,同指的应该是协同,协助,互相合作 如进程,线程同步,可以理解为进程或者线程A,B一块配合 A运行到某一个的阶段依靠B的某一个结果 所以A停下来,让B运行 B执行得到的结果给A,让A在继续操作 2.解决线程同时修改全局变量的方式 使用线程同步思路 线程a调取全局变量的时候,给变量加一把锁 当a执行完然后再释…
@ 目录 1.全局变量的修改 2.全局变量在多线程中的共享 3.多线程可能遇到的问题 1.全局变量的修改 代码实现 num = 100 nums = [11,22] def test(): global num num += 100 def test2(): nums.append(33) print(num) print(nums) test() test2() print(num) print(nums) 输出: 200 [11, 22, 33] 注意 num在函数中使用要先使用globel…
http://www.cnblogs.com/vingi/articles/2657790.html for i in range(10): t = ThreadTest(i) thread_arr.append(t) for i in range(10): thread_arr[i].start() for i in range(10): thread_arr[i].join() 简单说,阻塞进程指导线程执行完毕.通用的做法是我们启动一批线程,最后join这些线程结束. 总结:1 join方法…
@ 目录 1.类比 2.总结 关于作者 1.类比 一个生产玩具的工厂: 一个生产线成为一个进程,一个生产线有多个工人,所以工人为线程 单进程-多线程:一条生产线,多个工人 多进程-多线程:多条生产线,多个工人 协程:工人空闲的时候安排做其他事 2.总结 1.进程是资源分配的单位 2.线程为操作系统调度的单位 3.进程切换需要的资源很大,效率很低 4.线程需要的资源一般,效率一般(不考虑GIL) 5.协程切换的任务资源很小,效率高 6.多进程,多线程根据cpu核数不同可能是并行的,但协程是在一个线…
@ 目录 1.注意 2. 代码 关于作者 1.注意 先定义函数,函数里面放一个yiled 主函数生成该对象 执行while循环 调用生成器对象的next 因为每次调用next,不会继续执行,从而 完成多进程 2. 代码 import time def task_1(): while True: print("1") time.sleep(0.2) yield def task_2(): while True: print("2") time.sleep(0.2) y…
@ 目录 1.需求 2.斐波那契数列演示 3.并不是只有for循环能接收可迭代数据类型,list,tuple也可以 1.需求 类比 早上起来吃包子 1.买1年的包子,放在冰箱,每天拿一个 2.每天下楼买一个包子吃 1会占据大量空间,2满足需求不占大量空间 所以迭代器奥比返回列表的方式节省大量内存空间 迭代器最终存储的是生成这个数据的方式而不是数据的结果 2.斐波那契数列演示 代码实现 class Fibonacci(object): def __init__(self,all_num): sel…
@ 目录 1.死锁 2.避免死锁的方式-银行家算法 1.死锁 死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程. 2.避免死锁的方式-银行家算法 银行家算法(Banker's Algorithm)是一个避免死锁(Deadlock)的著名算法,是由艾兹格·迪杰斯特拉在1965年为T.H.E系统设计的一种避免死锁产生的算法.它以银行借贷系统的分…
目录 多任务的概念 线程基础 单线程执行 多线程执行 主线程会等待所有子线程结束后才结束 查看线程数量 线程-注意点 线程执行代码的封装 线程的执行顺序 总结 多任务的概念 什么叫"多任务"呢?简单地说,就是操作系统可以同时运行多个任务.打个比方,你一边在用浏览器上网,一边在听MP3,一边在用Word赶作业,这就是多任务,至少同时有3个任务正在运行.还有很多任务悄悄地在后台同时运行着,只是桌面上没有显示而已. 现在,多核CPU已经非常普及了,但是,即使过去的单核CPU,也可以执行多任务…
什么叫“多任务”呢?简单地说,就是操作系统可以同时运行多个任务.打个比方,你一边在用浏览器上网,一边在听MP3,一边在用Word赶作业,这就是多任务,至少同时有3个任务正在运行.还有很多任务悄悄地在后台同时运行着,只是桌面上没有显示而已. 注意: 并发:指的是任务数多余cpu核数,通过操作系统的各种任务调度算法,实现用多个任务“一起”执行(实际上总有一些任务不在执行,因为切换任务的速度相当快,看上去一起执行而已) 并行:指的是任务数小于等于cpu核数,即任务真的是一起执行的 1.线程 1.1线程…
Python多线程详解 2016/05/10 · 基础知识 · 1 评论· 多线程 分享到:20 本文作者: 伯乐在线 - 王海波 .未经作者许可,禁止转载!欢迎加入伯乐在线 专栏作者. 1.多线程的理解 多进程和多线程都可以执行多个任务,线程是进程的一部分.线程的特点是线程之间可以共享内存和变量,资源消耗少(不过在Unix环境中,多进程和多线程资源调度消耗差距不明显,Unix调度较快),缺点是线程之间的同步和加锁比较麻烦. 2.Python多线程创建 在Python中,同样可以实现多线程,有两…
转载自: http://blog.sina.com.cn/s/blog_9f488855010198vn.html 正确与否未验证 python中得thread的一些机制和C/C++不同:在C/C++中,主线程结束后,其子线程会默认被主线程kill掉.而在python中,主线程结束后,会默认等待子线程结束后,主线程才退出. python对于thread的管理中有两个函数:join和setDaemon join:如在一个线程B中调用threada.join(),则threada结束后,线程B才会接…
python的Thread类中提供了join()方法,使得一个线程可以等待另一个线程执行结束后再继续运行.这个方法还可以设定一个timeout参数,避免无休止的等待.因为两个线程顺序完成,看起来象一个线程,所以称为线程的合并. 转自: http://www.cnblogs.com/holbrook/archive/2012/03/21/2410120.html…