假设我有一个像这样的data.table:
表:
V1 V2
A B
C D
C A
B A
D C
Run Code Online (Sandbox Code Playgroud)
我想将每一行视为一组,这意味着BA和AB是相同的.所以在这个过程之后,我想得到:
V1 V2
A B
C D
C A
Run Code Online (Sandbox Code Playgroud)
为了做到这一点,我必须先逐行对表进行排序,然后使用unique删除重复项.如果我有数百万行,排序过程非常慢.那么有没有一种简单的方法来删除重复项而不进行排序?
生产者/消费者协程中的错误可能将项目和未完成的任务留在asyncio队列中。如果遇到错误,我只想停止循环,取消挂起的任务并清除队列。尽管我可以完成前两件事,但是我找不到清除队列的简便方法。阅读此答案后,我想出了三种方法:
import asyncio
q=asyncio.Queue()
for i in range(5):
q.put_nowait(i)
q.get_nowait()
loop=asyncio.get_event_loop()
#this will raise an error if q cannot join
loop.run_until_complete(asyncio.wait_for(q.join(),1))
#method 1
q._queue.clear()
q._finished.set()
q._unfinished_tasks = 0
#method 2
for _ in range(q.qsize()):
q.get_nowait()
for _ in range(q._unfinished_tasks):
q.task_done()
#method 3
del q
q=asyncio.Queue()
Run Code Online (Sandbox Code Playgroud)
那么哪个更好呢?
我可以get用来获得原始函数,如:
get('$')
.Primitive("$")
Run Code Online (Sandbox Code Playgroud)
但是,mget失败了:
mget('$')
Error: value for ‘$’ not found
Run Code Online (Sandbox Code Playgroud)
为什么?如何解决这个问题?
以前,我用于asyncio.wait_for超时控制,效果很好。最近,我学习了aiohttp软件包,发现它用于asyncio_timeout.timeout超时控制。然后我阅读了asyncio_timeout 的github页面(https://github.com/aio-libs/async-timeout)。作者声称它运行的速度比快asyncio.wait_for。所以我有两个问题:
asyncio_timeout.timeout完全取代asyncio.wait_for吗?我是否应该全部更换asyncio.wait_for以提高速度?我正在编写一个websocket客户端,asyncio.wait_for当前控制websocket.recv它被频繁调用。asyncio_timeout.timeout应该将其与一起使用async with。但是,在aiohttp帮助页面中,它们with代替async with(http://aiohttp.readthedocs.io/en/stable/)使用。那么哪一个是正确的呢?