- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
根据 documentation ,有几种队列的实现。我感兴趣的是 JoinableQueue 和 PriorityQueue,因为我想要一个具有优先级的可连接队列。
看来我只能在低版本中获得其中一个功能。 IE。在 3.5 中,我可以区分 Queue(可连接)和 PriorityQueue,但在 3.5 以下的 python 中,有 JoinableQueue 和 PriorityQueue(参见下面的示例)。
是否有可能将它们组合起来以获得在 3.4 中获得可连接 PriorityQueue 的通用方法?
try:
# Python 3.4.
from asyncio import JoinableQueue as Queue # joinable
from asyncio import PriorityQueue # I assume this one is not joinable
except ImportError:
# Python 3.5.
from asyncio import Queue # standard joinable
from asyncio import PriorityQueue # I assume this is the one I want
另一种方法可能会以某种方式影响 Queue?
最佳答案
由于 JoinableQueue
和 PriorityQueue
的实现方式,您可以通过多重继承来继承JoinablePriorityQueue
,只要您首先列出 JoinableQueue
。
这样做的原因是 PriorityQueue
的实现非常简单:
class PriorityQueue(Queue):
"""A subclass of Queue; retrieves entries in priority order (lowest first).
Entries are typically tuples of the form: (priority number, data).
"""
def _init(self, maxsize):
self._queue = []
def _put(self, item, heappush=heapq.heappush):
heappush(self._queue, item)
def _get(self, heappop=heapq.heappop):
return heappop(self._queue)
虽然 JoinableQueue
更复杂,但它和 PriorityQueue
实现的唯一方法是 _put
,而且最重要的是,JoinableQUeue
在其自己的 put
实现中调用 super()._put(..)
,这意味着它将与 PriorityQueue
正确协作。
这是一个证明它有效的例子:
from asyncio import PriorityQueue, JoinableQueue
import asyncio
import random
class JoinablePriorityQueue(JoinableQueue, PriorityQueue):
pass
@asyncio.coroutine
def consume(q):
while True:
a = yield from q.get()
print("got a {}".format(a))
if a[1] is None:
q.task_done()
return
asyncio.sleep(1)
q.task_done()
@asyncio.coroutine
def produce(q):
for i in range(10):
yield from q.put((random.randint(0,10), i))
yield from q.put((100, None)) # Will be last
asyncio.async(consume(q))
print("waiting...")
yield from q.join()
print("waited")
loop = asyncio.get_event_loop()
q = JoinablePriorityQueue()
loop.run_until_complete(produce(q))
输出:
waiting...
got a (1, 2)
got a (2, 1)
got a (4, 4)
got a (5, 0)
got a (6, 8)
got a (6, 9)
got a (8, 3)
got a (9, 5)
got a (9, 7)
got a (10, 6)
got a (100, None)
waited
关于python - python asyncio 中的 Joinable PriorityQueue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31370701/
尝试用这样的 OR 条件连接 2 个表: FULL JOIN table1 ON (replace(split_part(table1.contract_award_number::text
我有以下功能: void threadProc(){ for (int i = 0; i < 5; ++i) { std::cout << "\n thread #" <<
关于 std::thread::joinable 的网站 cppreference 上有说明: Checks if the thread object identifies an active thr
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 5 年前。 Improve this qu
std::mutex MTX; bool ExitThread = false; //This function is running in a separate thread //for const
根据 documentation ,有几种队列的实现。我感兴趣的是 JoinableQueue 和 PriorityQueue,因为我想要一个具有优先级的可连接队列。 看来我只能在低版本中获得其中一个
假设我有以下类(class) class A { public: A() { my_thread=std::thread(std::bind(&A::foo, th
自从我对程序进行了更改后我遇到了问题,这可能是由于线程本身调用了 joinable。在这种情况下到底发生了什么? 编辑:我做了一些调试,问题是 Joinable 方法。 std::mutex thre
在 std::thread 中,如果我调用 join() 并且线程不可连接,则会引发异常。 所以我这样做: if (thread.joinable()) thread.join(); 现在假设线程
当我尝试使用内部连接连接表时..它返回数据..但是当我使用完全外部连接连接 4 个表时我说 ERROR: FULL JOIN is only supported with merge-joinable
我是一名优秀的程序员,十分优秀!