我有以下数据框,我想先按Criticality排序,然后按名称排序:
Name Criticality
baz High
foo Critical
baz Low
foo Medium
bar High
bar Low
bar Medium
...
Run Code Online (Sandbox Code Playgroud)
我一直试图使用这篇文章中提供的答案来做到这一点,但我无法让它工作.
最终结果应该是这样的
Name Criticality
bar High
bar Medium
bar Low
baz High
baz Low
foo Critical
foo Medium
Run Code Online (Sandbox Code Playgroud) 我想弄清楚如何重新排队一些已超时的异步 DNS 请求(我正在使用 uvloop 和 aiodns 模块)。
这是我设置循环的代码:
asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
loop = asyncio.get_event_loop()
resolver = aiodns.DNSResolver(loop=loop)
sem = asyncio.Semaphore(MAX_COUNT)
Run Code Online (Sandbox Code Playgroud)
此函数执行查找:
async def lookup(name):
with (await sem):
response = await resolver.query(name, 'A')
return response
Run Code Online (Sandbox Code Playgroud)
我读入了一个包含名称的文件以查找和设置任务,包括处理结果的回调:
for n in names:
host = '{}.{}'.format(n, domain)
task = asyncio.ensure_future(lookup(host))
tasks.append(task)
task.add_done_callback(functools.partial(got_result, host))
Run Code Online (Sandbox Code Playgroud)
并启动查找队列。
print("Looking up {} subdomains...".format(len(names)))
loop.run_until_complete(asyncio.wait(tasks))
loop.close()
Run Code Online (Sandbox Code Playgroud)
在got_result回调中,我然后测试 future.exception() 并处理它,如果有,如果没有,则将结果打印到屏幕上。我可以接受一些例外情况(即找不到域名),但其他人喜欢超时,我想重新排队项目。是否有一种简单的方法可以将未来添加回循环以进行另一次尝试,还是我需要为此设置单独的功能并手动重新添加任务?
谢谢你的帮助。