小编use*_*063的帖子

python twisted代理超时

我很擅长扭曲,我正在尝试创建一个异步客户端来获取一些URL并将结果保存到每个URL的不同文件中.当我使用有限数量的服务器运行程序时,假设10,反应器循环正确结束并且程序终止.但是当我用例如Alexa top 2500运行程序时,程序开始获取URL但是然后不终止.我已设置超时但它不起作用,我相信必须有一些打开的套接字不会因错误或成功而触发任何回调.我的目标是,一旦程序获取了页面,或者每个连接超时已到期,程序必须终止并关闭所有活动的文件描述符.

我很抱歉,但复制和粘贴时没有保留代码缩进,现在我已经检查过并且已经修复了.代码是最小的例子,请注意,我的问题是当我启动程序时,反应堆没有停止,需要抓取大量站点.

#!/usr/bin/env python

from pprint import pformat
from twisted.internet import reactor
import twisted.internet.defer
import sys
from twisted.internet.protocol import Protocol
from twisted.web.client import Agent
from twisted.web.http_headers import Headers

class PrinterClient(Protocol):
    def __init__(self, whenFinished, output):
         self.whenFinished = whenFinished
         self.output = output

    def dataReceived(self, bytes):
         #print '##### Received #####\n%s' % (bytes,)
         self.output.write('%s' % (bytes,))

    def connectionLost(self, reason):
        print 'Finished:', reason.getErrorMessage()
        self.output.write('Finished: %s \n'%(reason.getErrorMessage()))
        self.output.write('#########end########%s\n'%(reason.getErrorMessage()))
        self.whenFinished.callback(None)

def handleResponse(r, output, url):
    output.write('############start############\n')
    output.write('%s\n'%(url))
    #print "version=%s\ncode=%s\nphrase='%s'" % (r.version, r.code, r.phrase)
    output.write("version=%s\ncode=%s\nphrase='%s'"\
             %(r.version, r.code, …
Run Code Online (Sandbox Code Playgroud)

python timeout twisted agent

4
推荐指数
1
解决办法
3363
查看次数

标签 统计

agent ×1

python ×1

timeout ×1

twisted ×1