每个域的异步扭曲、同步请求(有延迟)
async twisted, synchronous requests per domain (with delay)
假设我有 10 个域,但每个域都需要在请求之间有延迟(以避免 dos 情况和 ip-banning)。
我正在考虑调用 class 的异步扭曲,来自请求模块的请求有 delay(500) ,但随后对同一域的另一个请求使其成为 delay(250) 等等,依此类推上。
如何实现静态延迟,并为每个域 (class) 存储诸如队列之类的东西?
这是自定义网络抓取工具,扭曲的是 TCP,但这应该没有什么区别。我不要代码,要知识
使用 asyncio
进行异步时,
import asyncio
async def nested(x):
print(x)
await asyncio.sleep(1)
async def main():
# Schedule nested() to run soon concurrently
# with "main()".
for x in range(100):
await asyncio.sleep(1)
task = asyncio.create_task(nested(x))
# "task" can now be used to cancel "nested()", or
# can simply be awaited to wait until it is complete:
await task
asyncio.run(main())
with await in main, 它将每 2s 打印一次,
在 nasted 中没有 await,它将每 1 秒打印一次。
在main中没有await task,它会每隔0打印一次,即使声明了asyncio.sleep。
如果我们是async的新手,维护起来是完全困难的。
假设我有 10 个域,但每个域都需要在请求之间有延迟(以避免 dos 情况和 ip-banning)。
我正在考虑调用 class 的异步扭曲,来自请求模块的请求有 delay(500) ,但随后对同一域的另一个请求使其成为 delay(250) 等等,依此类推上。
如何实现静态延迟,并为每个域 (class) 存储诸如队列之类的东西?
这是自定义网络抓取工具,扭曲的是 TCP,但这应该没有什么区别。我不要代码,要知识
使用 asyncio
进行异步时,
import asyncio
async def nested(x):
print(x)
await asyncio.sleep(1)
async def main():
# Schedule nested() to run soon concurrently
# with "main()".
for x in range(100):
await asyncio.sleep(1)
task = asyncio.create_task(nested(x))
# "task" can now be used to cancel "nested()", or
# can simply be awaited to wait until it is complete:
await task
asyncio.run(main())
with await in main, 它将每 2s 打印一次,
在 nasted 中没有 await,它将每 1 秒打印一次。
在main中没有await task,它会每隔0打印一次,即使声明了asyncio.sleep。
如果我们是async的新手,维护起来是完全困难的。