发送许多 post 个请求
Sending many post requests
我对 Python 和请求比较陌生,所以我不确定解决这个问题的最佳方法。
我需要向 URL 发送大量 POST 请求。现在,我只是使用一个循环并发送请求,根据互联网,每 10 - 30 秒产生大约 100 个帖子。我正在寻找一种方法来更快地完成这项工作并发布更多帖子。向我推荐了多处理,但我在这方面的知识非常缺乏(我已经冻结了我的计算机试图产生太多进程)。
我怎样才能有效地实施多处理来增加我的结果?
这是取自 http://skipperkongen.dk/2016/09/09/easy-parallel-http-requests-with-python-and-asyncio/ 的代码示例,它可能会解决您的问题。它使用请求库为异步调用发出请求和 asyncio。您需要做的唯一更改是从 GET 调用更改为 POST 调用。
这是在 Python 3.5 中编写的(如文章中所述)
# Example 2: asynchronous requests
import asyncio
import requests
async def main():
loop = asyncio.get_event_loop()
futures = [
loop.run_in_executor(
None,
requests.get,
'http://example.org/'
)
for i in range(20)
]
for response in await asyncio.gather(*futures):
pass
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
我还建议阅读整篇文章,因为它显示了使用大量线程时的时间比较。
这里没有理由使用多处理。向 HTTP 服务器发出请求几乎完全是 I/O-bound,而不是 CPU-bound,因此线程工作得很好。
在 stdlib 的 concurrent.futures
文档中使用 ThreadPoolExecutor
的第一个示例完全符合您的要求,除了 urllib
而不是 requests
。
如果您正在做任何复杂的事情,请查看 requests-futures
。
如果您确实确实出于某种原因需要使用多处理(例如,您正在对每个结果进行大量文本处理,并且您希望将其并行化随着请求),您只需将 ThreadPoolExecutor
切换为 ProcessPoolExecutor
并且不更改代码中的任何其他内容。
我对 Python 和请求比较陌生,所以我不确定解决这个问题的最佳方法。
我需要向 URL 发送大量 POST 请求。现在,我只是使用一个循环并发送请求,根据互联网,每 10 - 30 秒产生大约 100 个帖子。我正在寻找一种方法来更快地完成这项工作并发布更多帖子。向我推荐了多处理,但我在这方面的知识非常缺乏(我已经冻结了我的计算机试图产生太多进程)。
我怎样才能有效地实施多处理来增加我的结果?
这是取自 http://skipperkongen.dk/2016/09/09/easy-parallel-http-requests-with-python-and-asyncio/ 的代码示例,它可能会解决您的问题。它使用请求库为异步调用发出请求和 asyncio。您需要做的唯一更改是从 GET 调用更改为 POST 调用。
这是在 Python 3.5 中编写的(如文章中所述)
# Example 2: asynchronous requests
import asyncio
import requests
async def main():
loop = asyncio.get_event_loop()
futures = [
loop.run_in_executor(
None,
requests.get,
'http://example.org/'
)
for i in range(20)
]
for response in await asyncio.gather(*futures):
pass
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
我还建议阅读整篇文章,因为它显示了使用大量线程时的时间比较。
这里没有理由使用多处理。向 HTTP 服务器发出请求几乎完全是 I/O-bound,而不是 CPU-bound,因此线程工作得很好。
在 stdlib 的 concurrent.futures
文档中使用 ThreadPoolExecutor
的第一个示例完全符合您的要求,除了 urllib
而不是 requests
。
如果您正在做任何复杂的事情,请查看 requests-futures
。
如果您确实确实出于某种原因需要使用多处理(例如,您正在对每个结果进行大量文本处理,并且您希望将其并行化随着请求),您只需将 ThreadPoolExecutor
切换为 ProcessPoolExecutor
并且不更改代码中的任何其他内容。