`

【Python真的很强大】多线程的使用

阅读更多

需求:  我们需要监控客户端是否已经掉线, 采用的做法是客服端定时发送消息到 socket server.  我们在socket server确认是否已经收到心跳消息,如果超时(timeout)则会剔除相应的客户端。

          为此,我们准备在python抽象出原型雏形。熟悉Javascript的可能知道定时器函数setTimeoutsetInterval. 

我们在Python(2.7)也可有类似功能: 如下:

    

def set_interval(func,extraArgs,sec):
    def func_wrapper():
        func(*extraArgs)
    t = threading.Timer(sec, func_wrapper)
    t.start()
    return t

 

下一步,为每一个客服端连接(session)建立一个AliveThread来处理,第一次客户端连接来的时候,push msg(msgId, timestamp,...); 第二次来的时候,pop(delete )msg and  append msg. 为此,有了

MsgManager这样的消息汇总,我们就能在一个monitor function中处理掉线.

 

 

为此,我们又需要类似java里面的Vector,ConcurrentHashMap来确保MsgManager线程操作安全。

如下:

 

 

from multiprocessing import Process, Manager
manager = Manager()
MsgManager = manager.list()

 

 

好了,剩下的很简单了:

 

 

set_interval(monitor,[self._msg],NO_MSG_RECEIVED_AFTER_INTERVAL)
def monitor(tmpMsg):
     log.info('kick out')

 

 

需求2: 为了给客服端最快的响应,我们从多个服务端获取信息,最快返回的信息将返回给客户。

为此,我们用 package concurrent:

 

# python2.7.x 安装 https://pypi.python.org/packages/source/f/futures/futures-2.1.6.tar.gz#md5=cfab9ac3cd55d6c7ddd0546a9f22f453
# python3.x 自带
from concurrent import futures
import urllib2

SERVICES = ['http://host1/service',
        'http://host2/service',
        'http://host3/service',
        'http://host4/service']

def load_url(url, timeout):
    return urllib2.urlopen(url, timeout=timeout).read()

with futures.ThreadPoolExecutor(max_workers=5) as executor:
    future_to_url = dict((executor.submit(load_url, url, 60), url)
                         for url in SERVICES)

    for future in futures.as_completed(future_to_url):
        url = future_to_url[future]
        if future.exception() is None:
            print('url: %s,content:%s' % (url, future.result()))
            break

 

0
1
分享到:
评论

相关推荐

    Python-python多线程函数库vthread简而强大

    更加方便的多线程库,以最小的代码侵入,做到最高效的多线程、线程池 coding 效率。在不改变源代码的情况下,一行代码即可实现线程池操作。

    Python-VidGear轻量级多线程OpenCV视频处理Python包装器

    VidGear是一个围绕OpenCV视频I/O模块的轻量级python包装器,它包含强大的多线程模块,可以在各种设备和平台上实现高速视频帧读取功能。 它是imutils库视频模块的重新实现,修复了所有主要错误,并附带了直接网络流...

    Python中一个强大的Spider:Web爬网程序

    Python中一个强大的Spider(Web爬网程序) 在Python中,一个强大的Spider(爬虫)是指一个具有高度灵活性和扩展性的网络爬取程序。...它可以使用多线程、协程或分布式任务队列等技术,以提高抓取效率。 ...

    Head First Python、Python核心编程

    ·通过用C等语言编写扩展来提升Python应用程序的性能,或者通过使用多线程增强I/0相关的应用程序的能力; ·学习Python中有关数据库的API,以及如何在Python中使用各种不同的数据库系统,包括MySQL、Postgres和 ...

    python多线程爬虫爬取电影天堂资源.zip

    工具齐全:提供一系列功能强大的Python爬虫工具,满足您不同场景下的需求。 教程详尽:配套的Python爬虫教程,从基础到进阶,让您逐步掌握爬虫的核心技术。 合法合规:严格遵守法律法规和网站使用协议,确保采集行为...

    Python3多线程爬虫实例讲解代码

    python提供了两个模块来实现多线程thread 和threading ,thread 有一些缺点,在threading 得到了弥补。并且在Python3中废弃了thread模块,保留了更强大的threading模块。 使用场景 在python的原始解释器CPython中...

    基于Python3的多线程并发式高频交易平台,.rar

    Python提供了像scikit-learn这样强大的机器学习库,以及TensorFlow和Keras等深度学习框架,可以帮助开发者建立各种模型,例如随机森林、神经网络等等。 自动化交易和风险控制 在高频交易中,交易系统往往需要高度...

    Python实用教程:Python基础,Python高级特性,面向对象编程,多线程,数据库,数据科学,Flask,爬虫开发教程

    工具齐全:提供一系列功能强大的Python爬虫工具,满足您不同场景下的需求。 教程详尽:配套的Python爬虫教程,从基础到进阶,让您逐步掌握爬虫的核心技术。 合法合规:严格遵守法律法规和网站使用协议,确保采集行为...

    基于Python3的多线程并发式高频交易平台, 提供一致的回测和实时交易解决方案

    基于Python3的多线程并发式高频交易平台, 提供一致的回测和实时交易解决方案。它遵循现代设计模式,例如事件驱动,服务器/客户端架构和松散耦合的强大稳定的分布式系统。它遵循与其他EliteQuant产品线相同的结构和...

    windows 64位 python-3.4安装包

    Python标准库命名接口清晰、文档良好,很容易学习和使用。 Python社区提供了大量的第三方模块,使用方式与标准库类似。它们的功能无所不包,覆盖科学计算、Web开发、数据库接口、图形系统多个领域,并且大多成熟而...

    vthread:python更加方便的多线程库,以最小的代码入侵,做到最高效的多线程,线程池编码效率。

    python多线程函数库vthread,简而强大 安装 C:\Users\Administrator> pip3 install vthread 线程池(核心功能) 不加装饰器就是普通的单线程,只用加一行就能在不破坏原来的结构直接实现线程池操作,能进行参数传递...

    面向对象编程基础_python面向对象_python教程_

    python强大的面向对象能力,让你更好的理解python核心语法

    Python访问Mysql数据库

    Python 标准库确实很庞大。它可以帮助处理各种工作, 包括正则表达式、文档生成、单元测试、线程、数据库、网 页浏览器、CGI、FTP、电子邮件、XML、XML -RPC、 HTML、WAV 文件、密码系统、GUI (图形用户界面)、Tk ...

    ZhihuSpider:知乎用户公开个人信息爬虫,能够爬取用户关注关系,基于Python,使用代理,多线程

    Python知乎用户信息爬虫特色除了爬取用户信息外,还可以选择爬取用户之间的关注关系使用多线程爬取,并可以自行配置使用的线程数使用Redis作为任务价值使用高匿代理IP进行数据的爬取,并重新后会重新分配新的可用...

    Python编程入门经典

    16.4.6 多线程服务器 302 16.4.7 Python聊天服务器 303 16.4.8 设计Python聊天 服务器 303 16.4.9 Python聊天服务器协议 304 16.4.10 Python聊天客户端 309 16.4.11 基于select的单线程 多任务 312 16.5 其他主题 ...

    Python 3程序开发指南(第二版) 中文版电子书

    Python 3功能更强大,使用更方便,语法更一致,表达能力更丰富。本书将编写程序、使用标准或第三方Python 3库、创建新的专用库模块所必需的所有相关知识整合到了一起。 Python是一种脚本语言,在各个领域得到了日益...

    PFFDTD 是用于 3D 房间声学 的开源FDTD模拟器_python_代码_下载

    多线程 CPU 执行 基于 Python 的体素化与 CPU 多处理 机器精度的节能(数值稳定性) 7 点笛卡尔和 13 点面心立方 (FCC) 方案 频率相关阻抗边界 适用于非防水模型 单精度运行的稳定性保障 一种新颖的楼梯边界面修正...

    Python源码剖析

    此外,Python强大的可扩展性,让开发人员既可以非常容易地利用C/C++编写Python的扩展模块,还能将Python嵌入到C/C++程序中,为自己的系统添加动态扩展和动态编程的能力。., 为了更好地利用Python语言,无论是使用...

    Python-Newspaper可以用来提取新闻文章和内容分析

    Newspaper可以用来提取新闻、文章和内容分析。使用多线程,支持10多种语言等。 作者从requests库的简洁与强大得到灵感,使用python开发的可用于提取文章内容的程序。

Global site tag (gtag.js) - Google Analytics