Python中asyncore的用法实例

本文实例讲述了python中asyncore模块的用法,分享给大家供大家参考。具体方法如下:

实例代码如下:

##asyncore 

import asyncore,socket 

########################################################################
class AsyncGet(asyncore.dispatcher):
  """
  the defined class
  """ 

  #----------------------------------------------------------------------
  def __init__(self, host):
    """Constructor"""
    asyncore.dispatcher.__init__(self)
    self.host = host
    self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
    self.connect((host, 80))
    self.request = "Get /index.html HTTP/1.0\r\n\r\n"
    self.outf = None
    print "连接 :", host 

  def handle_connect(self):
    print 'connect:', self.host
    pass
  def handle_read(self):
    if not self.outf:
      print '正在连接:',self.host
    self.outf = open("%s.txt" % self.host, 'wb')
    data = self.recv(8192)
    if data:
      self.outf.write(data) 

    pass
  def handle_writebale(self):
    return len(self.request) 

  def handle_write(self):
    num_sent = self.send(self.request)
    pass 

  def handle_close(self):
    asyncore.dispatcher.close(self)
    print "socket close in:",self.host
    if self.outf:
      self.outf.close()
    pass 

if __name__ == "__main__":
  AsyncGet("www.python.org")
  asyncore.loop() 

import asyncore,socket 

########################################################################
class AsyncGet(asyncore.dispatcher):
  """
  the defined class
  """ 

  #----------------------------------------------------------------------
  def __init__(self, host):
    """Constructor"""
    asyncore.dispatcher.__init__(self)
    self.host = host
    self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
    self.connect((host, 80))
    self.request = "Get /index.html HTTP/1.0\r\n\r\n"
    self.outf = None
    print "连接 :", host 

  def handle_connect(self):
    print 'connect:', self.host
    pass
  def handle_read(self):
    if not self.outf:
      print '正在连接:',self.host
    self.outf = open("%s.txt" % self.host, 'wb')
    data = self.recv(8192)
    if data:
      self.outf.write(data) 

    pass
  def handle_writebale(self):
    return len(self.request) 

  def handle_write(self):
    num_sent = self.send(self.request)
    pass 

  def handle_close(self):
    asyncore.dispatcher.close(self)
    print "socket close in:",self.host
    if self.outf:
      self.outf.close()
    pass 

if __name__ == "__main__":
  AsyncGet("www.python.org")
  asyncore.loop()

结果文件的内容为:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>302 Found</title>
</head><body>
<h1>Found</h1>
<p>The document has moved <a href="http://www.python.org">here</a>.</p>
<hr>
<address>Apache/2.2.16 (Debian) Server at dinsdale.python.org Port 80</address>
</body></html>

希望本文所述对大家的Python程序设计有所帮助。

(0)

相关推荐

  • 简单介绍Python的Tornado框架中的协程异步实现原理

    Tornado 4.0 已经发布了很长一段时间了, 新版本广泛的应用了协程(Future)特性. 我们目前已经将 Tornado 升级到最新版本, 而且也大量的使用协程特性. 很长时间没有更新博客, 今天就简单介绍下 Tornado 协程实现原理, Tornado 的协程是基于 Python 的生成器实现的, 所以首先来回顾下生成器. 生成器 Python 的生成器可以保存执行状态 并在下次调用的时候恢复, 通过在函数体内使用 yield 关键字 来创建一个生成器, 通过内置函数 next 或生

  • python实现异步回调机制代码分享

    1 将下面代码拷贝到一个文件,命名为asyncore.py 复制代码 代码如下: import socketimport selectimport sys def ds_asyncore(addr,callback,timeout=5):    s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)    s.connect(addr)    r,w,e = select.select([s],[],[],timeout)    if r:     

  • Python的Asyncore异步Socket模块及实现端口转发的例子

    Asyncore模块提供了以异步的方式写入套接字服务客户端和服务器的基础结构. 只有两种方式使一个程序在单处理器上实现"同时做不止一件事".多线程编程是最简单和最流行的方式,但是有另一种很不一样的技术,可以使得我们保持多线程的几乎所有优势,却不用真正使用多线程. 如果你的程序主要是受I/O限制的,这是唯一可行的方式.如果你的程序是受处理器限制的,则先发制人的调度线程可能是你真正需要的.但是,很少网络服务器是受处理器限制的. 如果您的操作系统支持在其I / O库的 select() 系统

  • Python多线程、异步+多进程爬虫实现代码

    安装Tornado 省事点可以直接用grequests库,下面用的是tornado的异步client. 异步用到了tornado,根据官方文档的例子修改得到一个简单的异步爬虫类.可以参考下最新的文档学习下. pip install tornado 异步爬虫 #!/usr/bin/env python # -*- coding:utf-8 -*- import time from datetime import timedelta from tornado import httpclient, g

  • python高并发异步服务器核心库forkcore使用方法

    1 拷贝下面的代码到一个文件,并命名为forkcore.py 复制代码 代码如下: import osimport threadingimport selectimport socket class ds_forkcore(object): #async IO(epoll)    def ds_epoll(self):        epoll=select.epoll()        epoll.register(self.s.fileno(),select.EPOLLIN|select.E

  • Python学习之asyncore模块用法实例教程

    本文以实例分析了Python中asyncore模块的原理及用法,分享给大家供大家参考.具体分析如下: asyncore库是python的一个标准库,它是一个异步socket的包装.我们操作网络的时候可以直接使用socket等底层的库,但是asyncore使得我们可以更加方便的操作网络,避免直接使用socket,select,poll等工具时需要面对的复杂. 这个库很简单,包含了一个函数和一个类 * loop()函数 * dispatcher基类 需要注意的是,loop函数是全局的,不是dispa

  • python异步任务队列示例

    很多场景为了不阻塞,都需要异步回调机制.这是一个简单的例子,大家参考使用吧 复制代码 代码如下: #!/usr/bin/env python# -*- coding: UTF-8 -*- import loggingimport queueimport threading def func_a(a, b):    return a + b def func_b():    pass def func_c(a, b, c):    return a, b, c # 异步任务队列_task_queu

  • Python中asyncore异步模块的用法及实现httpclient的实例

    基础 这个模块是socket的异步实现,让我们先来熟悉一下模块中的一些类和方法: 1.asyncore.loop 输入一个轮询循环直到通过计数或打开的通道已关闭. 2.asyncore.dispatcher dispatcher类是一个底层socket类的包装对象.要使它更有用, 它有一部分事件处理方法被异步循环调用.否则它就是一个标准的非阻塞socket对象. 底层的事件在特定事件或特定的连接状态告诉异步循环,某些高级事件发生了.例如, 我们要求一个socket连接到另一个主机. (1)han

  • 跨平台python异步回调机制实现和使用方法

    1 将下面代码拷贝到一个文件,命名为asyncore.py 复制代码 代码如下: import socketimport selectimport sys def ds_asyncore(addr,callback,timeout=5):    s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)    s.connect(addr)    r,w,e = select.select([s],[],[],timeout)    if r:     

  • 在Python中使用异步Socket编程性能测试

    OK,首先写一个python socket的server段,对开放三个端口:10000,10001,10002.krondo的例子中是每个server绑定一个端口,测试的时候需要分别开3个shell,分别运行.这太麻烦了,就分别用三个Thread来运行这些services. import optparse import os import socket import time from threading import Thread import StringIO txt = '''1111 2

随机推荐