我有以下代码:
@asyncio.coroutine
def do_something_periodically():
while True:
asyncio.async(my_expensive_operation())
yield from asyncio.sleep(my_interval)
if shutdown_flag_is_set:
print("Shutting down")
break
Run Code Online (Sandbox Code Playgroud)
我运行此功能直到完成.设置关闭时会出现问题 - 该功能完成,任何挂起的任务都不会运行.(你认为这是一个错误
task: <Task pending coro=<report() running at script.py:33> wait_for=<Future pending cb=[Task._wakeup()]>>
Run Code Online (Sandbox Code Playgroud)
).如何正确安排关机?
为了给出一些上下文,我正在编写一个系统监视器,它每隔5秒从/ proc/stat读取一次,计算该时间段内的CPU使用率,然后将结果发送到服务器.我想继续安排这些监视作业,直到我收到sigterm,当我停止调度,等待所有当前作业完成,然后正常退出.
我写了一个脚本,它有多个线程(用它创建threading.Thread)从一个Queueusing中获取URL queue.get_nowait(),然后处理HTML.我是多线程编程的新手,我很难理解queue.task_done()函数的用途.
当Queue为空时,它会自动返回queue.Empty异常.所以我不明白每个线程需要调用该task_done()函数.我们知道我们已经完成了队列的空白,所以为什么我们需要通知它工作线程已经完成了他们的工作(与队列有关,在他们从中获取了URL之后) ?
有人可以给我提供一个代码示例(理想情况下使用urllib,文件I/O,或斐波那契数字以外的其他内容并打印"Hello"),它向我展示了如何在实际应用中使用此函数?