python网络编程之socketserver

关于socket的基础介绍可以点击python网络编程之socket查看。

socketserver

简介

socket并不能多并发,只能支持一个用户。socketserver则实现了并发处理。当有多个客户端连接时,socketserver都会在服务器上创建一个线程或进程来处理该客户端的请求,一个客户端对应一个服务端的进程或线程,这样增加系统的利用率。
socketserver是socket的封装,简化了编写网络服务程序的任务。python2中为SocketServer,python3中取消了首字母大写,改为socketserver

继续阅读全文 »

python网络编程之socket

网络编程,肯定就会涉及到网络中进程的通信,那么网络中进程如何通信呢?

知识点

网络中的进程通信

首先需要标识一个进程。本地可以通过进程PID来唯一标识一个进程,但在网络中不可行。TCP/IP协议中,在网络层用IP地址唯一标识网络中的主机,传输层中用协议+端口唯一标识主机中的应用程序(进程),这样利用三元组(IP地址,协议,端口)就可以标识网络的进程,网络中的进程通信就可以利用这个标识与其它进程进行交互。
使用TCP/IP协议的应用程序通常采用引用编程接口:UNIX BSD的套接字(socket)来实现网络进程之间的通信。

继续阅读全文 »

python多线程练习题

多线程练习题目,涉及知识点较多,属于很好的练习题。

题目要求

通过多线程实现类似linux中的>>功能,也就是将日志记录到指定的文件中。

题目分析

基本为main.py写主要处理逻辑,utils.py构造工具类及对应的方法。
main.py
定义Server()类,类中定义方法输出内容。
实例化工具类,启动线程,设置标准输出和错误输出至日志文件。
实例化Server()类并调用方法进行内容的持续输出。

继续阅读全文 »

python任务调度模块celery

celery简介

Celery是一个python开发的异步分布式任务调度模块。
Celery本身并不提供消息服务,使用第三方服务,也就是borker来传递任务,一般使用rabbitMQ或者Redis。

  • Celery特点
    简单:一单熟悉了celery的工作流程后,配置和使用还是比较简单的。
    高可用:当任务执行失败或执行过程中发生连接中断,celery 会自动尝试重新执行任务。
    快速:一个单进程的celery每分钟可处理上百万个任务。
    灵活: 几乎celery的各个组件都可以被扩展及自定制。

    继续阅读全文 »

python消息队列

消息队列简介

消息队列”是在消息的传输过程中保存消息的容器。
消息队列最经典的用法就是消费者和生成者之间通过消息管道来传递消息,消费者和生成者是不通的进程。生产者往管道中写消息,消费者从管道中读消息。

消息队列在multiprocessing的实现

操作系统提供了很多机制来实现进程间的通信 ,multiprocessing模块就提供了Queue和Pipe两种方法来实现。

继续阅读全文 »

python多线程

多线程

任务可以由多进程完成,也可以由一个进程内的多线程完成。
我们前面提到了进程是由若干线程组成的,一个进程至少有一个线程。
由于线程是操作系统直接支持的执行单元,因此,高级语言通常都内置多线程的支持,Python也不例外,并且,Python的线程是真正的Posix Thread,而不是模拟出来的线程。Python的标准库提供了threading模块。

继续阅读全文 »

python多进程

进程简介

进程是程序在计算机上的一次执行活动。当你运行一个程序,你就启动了一个进程。显然,程序是死的(静态的),进程是活的(动态的)。进程可以分为系统进程和用户进程。凡是用于完成操作系统的各种功能的进程就是系统进程,它们就是处于运行状态下的操作系统本身;用户进程就不必我多讲了吧,所有由你启动的进程都是用户进程。进程是操作系统进行资源分配的单位。
在操作系统的管理下,所有正在运行的进程轮流使用CPU,每个进程允许占用CPU的时间非常短(比如10毫秒),这样用户根本感觉不出来CPU是在轮流为多个进程服务,就好象所有的进程都在不间断地运行一样。但实际上在任何一个时间内有且仅有一个进程占有CPU。

继续阅读全文 »

python访问memcached

memcached介绍

Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。
memcached在实现分布式群集部署时,memcached服务之间是不能进行通讯的,分布式也是通过客户端的算法把数据保存在不同的memcached中。magent是一款开源的代理服务软件,我们可以通过它来实现缓存数据的同步。magent还可以使用keepalived来实现高可用。

继续阅读全文 »