gpt4 book ai didi

python - Eventlet 线程不并行运行

转载 作者:太空宇宙 更新时间:2023-11-03 14:27:54 24 4
gpt4 key购买 nike

我编写了以下代码:

import eventlet
import requests
import redis

redis = redis.StrictRedis(host="localhost", port="6379", db=0)

proxy_1_pool = eventlet.GreenPool(40)

def fetch_items():
for _ in range(0, 400):
proxy_1_pool.spawn(fetch_listing)

proxy_1_pool.waitall()

def fetch_listing():
logger.info("START fetch: " + str(datetime.utcnow()))
url_info = redis.spop("listings_to_crawl")
content = make_request(url_info)
logger.info("END fetch: " + str(datetime.utcnow()))
if content:
do_something(content)

def make_request(url_info):
r = requests.get(url_info)
return r.content

def main():
fetch_items()

不幸的是,我看到 fetch_listing 是按顺序参与的。

它总是会打印:

START
END
START
END

虽然我希望看到:

START
START
END
END

最佳答案

发生了什么事:

  • 您要求 eventlet 同时执行多个 fetch_listing()。问题标题中的并行永远不会发生,忘记它吧。它按照命令执行,您可以通过将 eventlet.sleep() 放在 logger.info...START
  • 之后进行验证
  • 然后执行被 redis.spoprequests.get 阻止。

如何使阻塞代码与 eventlet 配合:patching或卸载到线程池。

-import eventlet
+import eventlet ; eventlet.monkey_patch()

非常相关问题,强烈建议阅读:

关于python - Eventlet 线程不并行运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47499686/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com