Python gevent和Queue的问题

发布于 2022-09-03 08:16:12 字数 718 浏览 30 评论 0

访问6个URL,怎么样才能开启两个gevent,当访问结束后,继续访问剩下的4个URL。
下面这段代码,访问两个URL后程序就结束了。

代码

# coding=utf-8

from gevent import monkey; monkey.patch_socket()
import gevent
import requests
import queue

q = queue.Queue()

def get_data(url):
    print('GET: %s' %url)
    resp = requests.get(url)
    data = resp.text
    print('%d bytes received from %s.' %(len(data), url))

q.put('http://www.baidu.com')
q.put('http://www.163.com')
q.put('http://www.sougou.com')
q.put('http://www.bing.com')
q.put('http://www.tudou.com')
q.put('http://www.v2ex.com')

gevent_list = []

for i in range(2):
    gevent_list.append(
        gevent.spawn(get_data, q.get_nowait())
    )

gevent.joinall(gevent_list)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

鹤舞 2022-09-10 08:16:12

自己解决了,应该在get_data方法里面从队列中获取

def get_data():
    while not q.empty():
        url = q.get_nowait()
        print('GET: %s' %url)
        resp = requests.get(url)
        data = resp.text
        print('%d bytes received from %s.' %(len(data), url))

下面spawn的时候就不需要传参数了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文