小编Mic*_*eon的帖子

Python请求多线程

我一直试图在两天内构建一个具有多线程功能的刮刀.不知怎的,我仍然无法管理它.起初我尝试了使用线程模块的常规多线程方法,但它并不比使用单个线程快.后来我才知道请求是阻塞的,多线程方法并没有真正起作用.所以我一直在研究并发现了关于grequest和gevent的事情.现在我正在使用gevent运行测试,它仍然不比使用单个线程更快.我的编码错了吗?

这是我班级的相关部分:

import gevent.monkey
from gevent.pool import Pool
import requests

gevent.monkey.patch_all()

class Test:
    def __init__(self):
        self.session = requests.Session()
        self.pool = Pool(20)
        self.urls = [...urls...]

    def fetch(self, url):

        try:
            response = self.session.get(url, headers=self.headers)
        except:
            self.logger.error('Problem: ', id, exc_info=True)

        self.doSomething(response)

    def async(self):
        for url in self.urls:
            self.pool.spawn( self.fetch, url )

        self.pool.join()

test = Test()
test.async()
Run Code Online (Sandbox Code Playgroud)

python multithreading asynchronous gevent python-requests

20
推荐指数
1
解决办法
3万
查看次数