需求: 我们需要监控客户端是否已经掉线, 采用的做法是客服端定时发送消息到 socket server. 我们在socket server确认是否已经收到心跳消息,如果超时(timeout)则会剔除相应的客户端。
为此,我们准备在python抽象出原型雏形。熟悉Javascript的可能知道定时器函数setTimeout,setInterval.
我们在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
相关推荐
本主题聚焦于如何使用Python的Selenium与Chrome浏览器进行多开和多线程操作,结合phantomjs和chromedriver这两个关键组件来实现。首先,让我们详细了解一下这些概念。 1. **Selenium**: Selenium是一个强大的Web...
本压缩包“PYthon-multithreading-Test.rar”包含了有关Python多线程测试的源码,旨在帮助用户深入理解和实践Python的线程操作。 Python中的多线程是通过`threading`模块实现的,这个模块提供了基本的线程和同步...
"Python-python多线程函数库vthread简而强大"就是为了解决这一问题而诞生的。 vthread库是针对Python的一个增强型多线程库,它的主要目标是简化多线程和线程池的使用,提高开发效率。与Python标准库中的`threading`...
总的来说,这个Python m3u8多线程下载器结合了Python的灵活性、FFmpeg的强大功能以及多线程技术的效率,为用户提供了便捷的m3u8视频资源下载解决方案。无论是普通用户还是开发者,都能从中受益。在实际使用过程中,...
**Python程序设计:多线程爬虫** 在Python程序设计中,多线程爬虫是一种高效的数据抓取技术,尤其适用于需要处理大量网页并行抓取的场景。本主题主要探讨了多线程爬虫的基本原理,以及如何在Python中实现这一技术。...
总结,Python的多线程编程结合网络和串口通信,可以实现TCP客户端的网络串口透传,允许远程设备通过网络进行串行通信,这对于分布式系统和物联网应用来说是一个强大的工具。在实际开发中,应考虑线程安全、异常处理...
使用`thread`模块适合简单的线程任务,而`threading`模块则提供了更加强大和灵活的功能,适用于复杂的多线程程序设计。在编写多线程程序时,还需要注意线程间的同步问题,以防止数据竞争和死锁的发生。
`requests`库是Python中广泛使用的HTTP客户端,而`grequests`则结合了`requests`和`gevent`,实现了基于协程的多线程处理。`gevent`是一个基于greenlet的小型库,用于创建并发程序,它可以高效地管理线程,避免了...
3. **多线程下载**:利用Python的`threading`模块创建多个线程,每个线程从任务队列中取出一个TS片段的URL进行下载。为了保证TS文件的顺序,我们预先在文件中写入了每个TS文件的名称,这在后续的合并过程中非常重要...
本项目采用Python3实现了一个强大的网络爬虫,它利用多线程技术提高了爬取速度,能够自动无限地爬取互联网上的网址。在描述中提到,这个爬虫在半天时间内就能爬取到10万个网址,充分展示了其高效的性能。 首先,...
总的来说,Python的多线程编程是一种强大的工具,能够帮助开发者构建高效、并发的程序。然而,正确地管理和同步线程是至关重要的,以确保程序的稳定性和正确性。理解线程和进程的区别,熟练掌握`threading`和`Queue`...
因此,Python多线程在CPU密集型任务上的优势不明显,但在I/O密集型任务上表现较好。 在多线程编程中,线程间的同步非常重要,以避免竞态条件和数据不一致的问题。Python提供了多种同步机制,例如锁(Lock)、信号量...
Python多线程是指在Python编程语言中使用线程来执行多任务的技术。线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。多线程编程是并发编程的一部分,其目的是为了提高程序的...
在Python高级开发中,多线程和多进程是两个重要的概念,它们被广泛应用于提高程序的并发性能,尤其是在处理大量数据或需要同时执行多个任务时。本课程将深入讲解这两个主题,帮助开发者提升Python应用程序的效率。 ...
本文将详细介绍如何在 Python 中实现爬虫的多线程和多进程,以提高爬取效率。 在 Python 中实现爬虫的多线程或多进程可以显著提高爬取效率,但同时也需要注意它们各自的适用场景和潜在问题。本文提供了多线程、多...
huey提供了一种简单的方法来在Python应用中引入多线程和多进程,使得复杂的任务可以被分解为可独立执行的小单元,从而提高系统的响应速度和并发能力。 huey的核心特性包括: 1. **任务调度**:huey支持定时任务...
### Python技术如何进行多线程编程 #### 一、多线程编程的优势 多线程编程作为一种高效的任务处理方式,在现代软件开发中扮演着至关重要的角色。尤其对于Python这种广泛应用的语言来说,掌握多线程编程的技术显得...
在这个案例中,"python 爬虫 手机壁纸 多线程 下载" 指的是使用Python编写一个爬虫程序,目标是下载手机壁纸,并且利用多线程技术提高下载速度。 首先,让我们详细了解一下Python爬虫的基本概念。Python是一种高级...
在"python开发+多线程.zip"这个压缩包中,包含了一系列关于Python编程的初级到精通的学习资料,特别是聚焦于函数、文件操作、多线程和网络编程这四个关键领域。下面将对这些主题进行深入的探讨。 首先,让我们谈谈...