`

【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 selenium chrome 多开 多线程

    本主题聚焦于如何使用Python的Selenium与Chrome浏览器进行多开和多线程操作,结合phantomjs和chromedriver这两个关键组件来实现。首先,让我们详细了解一下这些概念。 1. **Selenium**: Selenium是一个强大的Web...

    PYthon-multithreading-Test.rar_python_python 多线程_python多线程_多线程

    本压缩包“PYthon-multithreading-Test.rar”包含了有关Python多线程测试的源码,旨在帮助用户深入理解和实践Python的线程操作。 Python中的多线程是通过`threading`模块实现的,这个模块提供了基本的线程和同步...

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

    "Python-python多线程函数库vthread简而强大"就是为了解决这一问题而诞生的。 vthread库是针对Python的一个增强型多线程库,它的主要目标是简化多线程和线程池的使用,提高开发效率。与Python标准库中的`threading`...

    python m3u8多线程下载器

    总的来说,这个Python m3u8多线程下载器结合了Python的灵活性、FFmpeg的强大功能以及多线程技术的效率,为用户提供了便捷的m3u8视频资源下载解决方案。无论是普通用户还是开发者,都能从中受益。在实际使用过程中,...

    Python程序设计:多线程爬虫.pptx

    **Python程序设计:多线程爬虫** 在Python程序设计中,多线程爬虫是一种高效的数据抓取技术,尤其适用于需要处理大量网页并行抓取的场景。本主题主要探讨了多线程爬虫的基本原理,以及如何在Python中实现这一技术。...

    python多线程编程实现网络串口透传

    总结,Python的多线程编程结合网络和串口通信,可以实现TCP客户端的网络串口透传,允许远程设备通过网络进行串行通信,这对于分布式系统和物联网应用来说是一个强大的工具。在实际开发中,应考虑线程安全、异常处理...

    Python多线程学习

    使用`thread`模块适合简单的线程任务,而`threading`模块则提供了更加强大和灵活的功能,适用于复杂的多线程程序设计。在编写多线程程序时,还需要注意线程间的同步问题,以防止数据竞争和死锁的发生。

    python多线程批量访问url脚本

    `requests`库是Python中广泛使用的HTTP客户端,而`grequests`则结合了`requests`和`gevent`,实现了基于协程的多线程处理。`gevent`是一个基于greenlet的小型库,用于创建并发程序,它可以高效地管理线程,避免了...

    python 实现多线程下载m3u8格式视频并使用fmmpeg合并

    3. **多线程下载**:利用Python的`threading`模块创建多个线程,每个线程从任务队列中取出一个TS片段的URL进行下载。为了保证TS文件的顺序,我们预先在文件中写入了每个TS文件的名称,这在后续的合并过程中非常重要...

    python3 网络爬虫 多线程 无限爬网址 带mysql sql带入文件

    本项目采用Python3实现了一个强大的网络爬虫,它利用多线程技术提高了爬取速度,能够自动无限地爬取互联网上的网址。在描述中提到,这个爬虫在半天时间内就能爬取到10万个网址,充分展示了其高效的性能。 首先,...

    Python多线程编程(6寸)[归纳].pdf

    总的来说,Python的多线程编程是一种强大的工具,能够帮助开发者构建高效、并发的程序。然而,正确地管理和同步线程是至关重要的,以确保程序的稳定性和正确性。理解线程和进程的区别,熟练掌握`threading`和`Queue`...

    Python信号与槽、多线程、类学习笔记.pdf

    因此,Python多线程在CPU密集型任务上的优势不明显,但在I/O密集型任务上表现较好。 在多线程编程中,线程间的同步非常重要,以避免竞态条件和数据不一致的问题。Python提供了多种同步机制,例如锁(Lock)、信号量...

    python多线程

    Python多线程是指在Python编程语言中使用线程来执行多任务的技术。线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。多线程编程是并发编程的一部分,其目的是为了提高程序的...

    完整版 Python高级开发课程 高级教程 08 Python多线程 多进程开发.pptx

    在Python高级开发中,多线程和多进程是两个重要的概念,它们被广泛应用于提高程序的并发性能,尤其是在处理大量数据或需要同时执行多个任务时。本课程将深入讲解这两个主题,帮助开发者提升Python应用程序的效率。 ...

    Python 爬虫进阶:多线程与多进程实现策略

    本文将详细介绍如何在 Python 中实现爬虫的多线程和多进程,以提高爬取效率。 在 Python 中实现爬虫的多线程或多进程可以显著提高爬取效率,但同时也需要注意它们各自的适用场景和潜在问题。本文提供了多线程、多...

    Python-huey小型多线程任务队列

    huey提供了一种简单的方法来在Python应用中引入多线程和多进程,使得复杂的任务可以被分解为可独立执行的小单元,从而提高系统的响应速度和并发能力。 huey的核心特性包括: 1. **任务调度**:huey支持定时任务...

    Python技术如何进行多线程编程.docx

    ### Python技术如何进行多线程编程 #### 一、多线程编程的优势 多线程编程作为一种高效的任务处理方式,在现代软件开发中扮演着至关重要的角色。尤其对于Python这种广泛应用的语言来说,掌握多线程编程的技术显得...

    python 爬虫 手机壁纸 多线程 下载

    在这个案例中,"python 爬虫 手机壁纸 多线程 下载" 指的是使用Python编写一个爬虫程序,目标是下载手机壁纸,并且利用多线程技术提高下载速度。 首先,让我们详细了解一下Python爬虫的基本概念。Python是一种高级...

    python开发+多线程.zip

    在"python开发+多线程.zip"这个压缩包中,包含了一系列关于Python编程的初级到精通的学习资料,特别是聚焦于函数、文件操作、多线程和网络编程这四个关键领域。下面将对这些主题进行深入的探讨。 首先,让我们谈谈...

Global site tag (gtag.js) - Google Analytics