【发布时间】:2019-03-03 08:53:51
【问题描述】:
我有一个生成任务的函数(io 绑定任务):
def get_task():
while True:
new_task = _get_task()
if new_task is not None:
yield new_task
else:
sleep(1)
我正在尝试在 asyncio 中编写一个消费者,该消费者将同时处理最多 10 个任务,一个任务完成然后将执行新的任务。 我不确定我是否应该使用信号量或者是否有任何类型的 asycio 池执行器?我开始用线程编写伪代码:
def run(self)
while True:
self.semaphore.acquire() # first acquire, then get task
t = get_task()
self.process_task(t)
def process_task(self, task):
try:
self.execute_task(task)
self.mark_as_done(task)
except:
self.mark_as_failed(task)
self.semaphore.release()
谁能帮帮我?我不知道在哪里放置 async/await 关键字
【问题讨论】:
-
顺便说一句,一次最多运行10个任务的要求从何而来?
-
现有问题以及可以在此处应用的解决方案:stackoverflow.com/a/48486557/705086
标签: python-3.x concurrency python-asyncio