python 多线程操作

# !/usr/bin/env python  
# -*- coding:utf-8 -*-  
   
import Queue  
import threading  
import time  
import re,urllib2
from bs4 import BeautifulSoup
   
class WorkManager(object):  
    def __init__(self, work_num=1000,thread_num=2):  
        self.work_queue = Queue.Queue()  
        self.threads = []  
        self.__init_work_queue(work_num)  
        self.__init_thread_pool(thread_num)  
   
    """ 
        初始化线程 
    """ 
    def __init_thread_pool(self,thread_num):  
        for i in range(thread_num):  
            self.threads.append(Work(self.work_queue))  
   
    """ 
        初始化工作队列 
    """ 
    def __init_work_queue(self, jobs_num):  
        for i in range(jobs_num):  
            self.add_job(do_job, i,jobs_num)  
   
    """ 
        添加一项工作入队 
    """ 
    def add_job(self, func, *args):  
        self.work_queue.put((func, list(args)))
    #任务入队,Queue内部实现了同步机制  
   
    """ 
        等待所有线程运行完毕 
    """    
    def wait_allcomplete(self):  
        for item in self.threads:  
            if item.isAlive():item.join()  
   
class Work(threading.Thread):  
    def __init__(self, work_queue):  
        threading.Thread.__init__(self)  
        self.work_queue = work_queue  
        self.start()  
   
    def run(self):  
        #死循环,从而让创建的线程在一定条件下关闭退出  
        while True:  
            try:  
                do, args = self.work_queue.get(block=False)#任务异步出队,Queue内部实现了同步机制  
                do(args)  
                self.work_queue.task_done()#通知系统任务完成  
            except:  
                break 
   
#具体要做的任务  
def do_job(args):  
    #time.sleep(0.1)#模拟处理时间  
    url = ‘http://www.baidu.com‘
    page = urllib2.urlopen(url)
    soup = BeautifulSoup(page.read(), "html.parser")
    print soup.title.string,list(args),args[0]
    #print agrs
    #print threading.current_thread(), list(args)  
   
if __name__ == ‘__main__‘:  
    start = time.time()  
    ‘‘‘开始‘‘‘
    work_manager =  WorkManager(100, 2)  
    work_manager.wait_allcomplete()  
    end = time.time()  
    print "cost all time: %s" % (end-start)
时间: 2024-10-22 05:28:01

python 多线程操作的相关文章

python threading模块使用 以及python多线程操作的实践(使用Queue队列模块)

今天花了近乎一天的时间研究python关于多线程的问题,查看了大量源码 自己也实践了一个生产消费者模型,所以把一天的收获总结一下. 由于GIL(Global Interpreter Lock)锁的关系,纯的python代码处理一般逻辑的确无法活动性能上的极大提升,但是在处理需要等待外部资源返回或多用户的应用程序中,多线程仍然可以作为一个比较好的工具来进行使用. python提供了两个模块thread和threading 来支持python的多线程操作.通俗的讲一般现在我们只使用threading

一行 Python 实现并行化 -- 日常多线程操作的新思路

转自: http://www.zhangzhibo.net/2014/02/01/parallelism-in-one-line/          http://chriskiehl.com/article/parallelism-in-one-line/  Python 在程序并行化方面多少有些声名狼藉.撇开技术上的问题,例如线程的实现和 GIL1,我觉得错误的教学指导才是主要问题.常见的经典 Python 多线程.多进程教程多显得偏"重".而且往往隔靴搔痒,没有深入探讨日常工作中

python多线程

http://blog.csdn.net/pipisorry/article/details/45306973 CPU-bound(计算密集型) 和I/O bound(I/O密集型) I/O bound 指的是系统的CPU效能相对硬盘/内存的效能要好很多,此时,系统运作,大部分的状况是 CPU 在等 I/O (硬盘/内存) 的读/写,此时 CPU Loading 不高.CPU bound 指的是系统的 硬盘/内存 效能 相对 CPU 的效能 要好很多,此时,系统运作,大部分的状况是 CPU Lo

Python多线程实现方法有几种

目前python多线程实现方式有很多种比如:thread,threading,multithreading ,其中thread模块比较底层,而threading模块是对thread做了一些包装,可以更加方便的被使用. 2.7 版本之前python对线程的支持还不够完善,不能利用多核CPU,但是2.7版本的python中已经考虑改进这点,出现了 multithreading模块.threading模块里面主要是对一些线程的操作对象化,创建Thread的class.一般来说,使用线程有两种 模式:

python多线程、多进程以及GIL

多线程 使用threading模块创建线程 传入一个函数 这种方式是最基本的,即调用threading中的Thread类的构造函数,然后指定参数target=func,再使用返回的Thread的实例调用start()方法,即开始运行该线程,该线程将执行函数func,当然,如果func需要参数,可以在Thread的构造函数中传入参数args=(-).示例代码如下 import threading #用于线程执行的函数 def counter(n): cnt = 0; for i in xrange

Python多线程锁

[Python之旅]第六篇(四):Python多线程锁 python lock 多线程 多线程使用方法 多线程锁 摘要:   在多线程程序执行过程中,为什么需要给一些线程加锁以及如何加锁,下面就来说一说. 1.给线程加锁的原因     我们知道,不同进程之间的内存空间数据是不能够共享的,试想一下,如果可以随意共享,谈何安全?但是一个进程中的多个线程是可以共享这个进程的内存空间中的数据的,比如多个线程可以同时调用某一... 在多线程程序执行过程中,为什么需要给一些线程加锁以及如何加锁,下面就来说一

python多线程学习记录

1.多线程的创建 import threading t = t.theading.Thread(target, args--) t.SetDeamon(True)//设置为守护进程 t.start(),启动线程 t.join(),阻塞当前线程,即使得在当前线程结束时,不会退出.会等到子线程结束之后才退出. 如果不加join语句,主线程不会等到子线程结束才结束,但却不会立即杀死该线程. 但是如果添加了SetDaemon(True),如果不加join,则会在主线程结束后马上杀死子线程. 如果join

IE exp中的多线程操作

最近在写cve-2014-0321这个漏洞的poc,分析的时候发现这流程简直就是个坑(越写越坑!!),没办法只能照着古河的思路,利用多线程进行操作.虽然知道多线程操作用window.open去创建,但调用了之后发现一直创建的都是个进程,根本就没有线程啊,简直就是个坑啊.后来无数次的尝试之后才发现,之前一直本地进行IE漏洞的调试,这样子使用window.open打开的总是一个进程,这样子也就没办法实现利用或者是占位.之后,用python架了简易的web服务,web的方式来访问,才发现window.

Python多线程(threading)学习总结

注:此文除了例子和使用心得是自己写的,很多都是Python核心编程中的原文.原文文风应该能看出来,就不每个地方单独表明出处了. 线程(有时被称为轻量级进程)跟进程有些相似,不同的是,所有的线程运行在同一个进程中,共享相同的运行环境.它们可以想像成是在主进程或"主线程"中并行运行的"迷你进程". 线程有开始,顺序执行和结束三部分.它有一个自己的指令指针,记录自己运行到什么地方.线程的运行可能被抢占(中断),或暂时的被挂起(也叫睡眠),让其它的线程运行,这叫做让步.一个