python 异步http请求_如何用python一次发送一个异步http请求?

您必须在不同的线程中运行它,或者使用内置的asyncore库。

大多数库将在您不知道的情况下使用线程,或者它将依赖于asyncore,这是Python的标准部分。在

以下是线程和异步的组合:#!/usr/bin/python

# -*- coding: iso-8859-15 -*-

import asyncore, socket

from threading import *

from time import sleep

from os import _exit

from logger import * #

from config import * #

class logDispatcher(Thread, asyncore.dispatcher):

def __init__(self, config=None):

self.inbuffer = ''

self.buffer = ''

self.lockedbuffer = False

self.is_writable = False

self.is_connected = False

self.exit = False

self.initated = False

asyncore.dispatcher.__init__(self)

Thread.__init__(self)

self.create_socket(socket.AF_INET, socket.SOCK_STREAM)

try:

self.connect((server, server_port))

except:

log('Could not connect to ' + server, 'LOG_SOCK')

return None

self.start()

def handle_connect_event(self):

self.is_connected = True

def handle_connect(self):

self.is_connected = True

log('Connected to ' + str(server), 'LOG_SOCK')

def handle_close(self):

self.is_connected = False

self.close()

def handle_read(self):

data = self.recv(8192)

while self.lockedbuffer:

sleep(0.01)

self.inbuffer += data

def handle_write(self):

while self.is_writable:

sent = self.send(self.buffer)

sleep(1)

self.buffer = self.buffer[sent:]

if len(self.buffer) <= 0:

self.is_writable = False

sleep(0.01)

def _send(self, what):

self.buffer += what + '\r\n'

self.is_writable = True

def run(self):

self._send('GET / HTTP/1.1\r\n')

while 1:

logDispatcher() #

asyncore.loop(0.1)

log('All threads are done, next loop in 10', 'CORE')

sleep(10)

或者你可以简单地做一个线程来完成任务然后死。在

^{pr2}$

如果您需要限制线程的数量(如果您发送的帖子超过5k,可能会对系统造成负担),只需执行一个while len(enumerate()) > 1000: sleep(0.1)并让looper对象等待几个线程消亡。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值