python - 将异步对象转换为列表
问题描述
我正在尝试从 proxybroker 获取代理列表:
import asyncio
from proxybroker import Broker
async def show(proxies):
while True:
proxy = await proxies.get()
if proxy is None: break
print('Found proxy: %s' % proxy)
proxies = asyncio.Queue()
broker = Broker(proxies)
tasks = asyncio.gather(
broker.find(types=['HTTP', 'HTTPS'], limit=10),
show(proxies))
loop = asyncio.get_event_loop()
result_now = loop.run_until_complete(tasks)
但是,我不确定如何将最终结果转换为普通列表。有什么帮助吗?谢谢!
解决方案
看来您问题中的代码是从 Python 复制粘贴的:Correct way of using proxybroker lib with asyncio
再次检查一下,看看这个片段实际上应该做什么(打印代理,而不是返回它们)
根据您的问题,要使用代理生成的代理填充 result_now,您需要从“读取器”协程返回一个值,该协程使用代理通过队列生成的异步事件。
带有模拟替换代理的示例:
import asyncio
async def broker_mock(proxy_queue):
for item in [1, 2, 3, 4, 5]:
proxy = await proxy_queue.put(item)
await proxy_queue.put(None)
async def show(proxy_queue):
found = []
while True:
proxy = await proxy_queue.get()
if proxy is None: break
found.append(proxy)
return found
proxy_queue = asyncio.Queue()
tasks = asyncio.gather(broker_mock(proxy_queue), show(proxy_queue))
loop = asyncio.get_event_loop()
result_now = loop.run_until_complete(tasks)
print(result_now[1])
# should printout: [1, 2, 3, 4, 5]
我建议阅读https://docs.python.org/3/library/asyncio-task.html以进一步解释 asyncio。
推荐阅读
- javascript - 如何发送包含空格和多个字符的文件
- javascript - Django 呈现一个“异常”页面,而不是一个可以帮助调试的页面
- python - Python中的递归、多态和继承混淆
- python - 刷新成员计数 - Discord.py
- riscv32 - risc-v neg 指令是如何实现的?
- javascript - 如何对我的列表进行排序,以便在下拉列表中有升序和降序选项?
- try-catch - 在 TCL catch 命令中捕获标准输出
- python - AttributeError:“功能”对象没有属性“配置”
- python - Python:确保字符串是用户的有效输入,并拒绝任何其他输入
- swift - Swift Realm 结果转换为模型