gpt4 book ai didi

Python:如何同时发送多个http请求? (像 fork )

转载 作者:太空宇宙 更新时间:2023-11-03 12:40:47 46 4
gpt4 key购买 nike

假设我有办法发送 http request到服务器。如何同时向服务器发送两个(或更多)这些请求?例如,也许通过 fork 一个过程?我该怎么做?(我也在使用 Django)

#This example is not tested...
import requests

def tester(request):
server_url = 'http://localhost:9000/receive'

payload = {
'd_test2': '1234',
'd_test2': 'demo',
}
json_payload = simplejson.dumps(payload)
content_length = len(json_payload)

headers = {'Content-Type': 'application/json', 'Content-Length': content_length}
response = requests.post(server_url, data=json_payload, headers=headers, allow_redirects=True)

if response.status_code == requests.codes.ok:
print 'Headers: {}\nResponse: {}'.format(response.headers, response.text)

谢谢!

最佳答案

我想你想在这里使用线程而不是 fork 新进程。虽然线程在某些情况下很糟糕,但在这里并非如此。另外,我想你想使用 concurrent.futures 而不是直接使用线程(或进程)。

例如,假设您有 10 个 URL,并且您目前正在连续处理它们,如下所示:

results = map(tester, urls)

但是现在,您想一次发送 2 个。只需将其更改为:

with concurrent.futures.ThreadPoolExecutor(max_workers=2) as pool:
results = pool.map(tester, urls)

如果您想一次尝试 4 个而不是 2 个,只需更改 max_workers .事实上,您可能应该尝试不同的值,看看哪种值最适合您的程序。

如果您想做一些更有趣的事情,请参阅文档—主要ThreadPoolExecutor Example几乎正是您要找的。

不幸的是,在 2.7 中,这个模块没有标准库,所以你必须安装 the backport来自 PyPI。

如果你有 pip 安装,这应该很简单:

pip install futures

……或者可能是sudo pip install futures , 在 Unix 上。

如果你没有 pip ,先去拿(点击上面的链接)。


您有时想要使用进程而不是线程的主要原因是您有繁重的 CPU 绑定(bind)计算,并且您想要利用多个 CPU 核心。在 Python 中,线程无法有效地用完所有内核。因此,如果任务管理器/事件监视器/任何显示您的程序在一个内核上使用了 100% 的 CPU,而其他内核都为 0%,那么进程就是答案。与 futures , 你所要做的就是改变 ThreadPoolExecutorProcessPoolExecutor .


与此同时,有时您需要的不仅仅是“给我一个神奇的工作人员池来运行我的任务”。有时你想运行一些非常长的作业而不是一堆小作业,或者你自己对作业进行负载平衡,或者在作业之间传递数据,等等。为此,您想使用 multiprocessing threading 而不是 futures .

很少,甚至那个都太高级了,直接告诉Python创建一个新的子进程或线程。为此,你一直走到 os.fork 。 (仅在 Unix 上)或 thread .

关于Python:如何同时发送多个http请求? (像 fork ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15752973/

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