【发布时间】:2019-08-02 09:14:06
【问题描述】:
考虑这个简化的例子:
def get_external_thing() -> str:
my_variable = a_blocking_operation()
my_variable.some_other_operation()
return my_variable
externally_gathered_thing = None
while True:
sleep(1)
externally_gathered_thing = get_external_thing()
if externally_gathered_thing:
do_something_1()
externally_gathered_thing = None
do_something_2()
这显然会进入循环,休眠一秒钟,然后进入get_external_thing() 并等待a_blocking_operation() 完成。只要get_external_thing() 正在运行,就不会执行任何其他操作。
如果get_external_thing() 没有完成,我想要完成的是强制我的循环继续并直接转到do_something_2()。但是,如果 get_external_thing() 已经完成并且 externally_gathered_thing 有一些价值,我希望 do_something_1() 也能被执行。
我怎样才能纯粹在 Python 中完成它?我尝试使用这个示例来学习 asyncio,但没有设法生成任何工作示例。由于项目要求,asyncio 是首选,但不是必须的。
换句话说,无论get_external_thing() 的结果如何,我都希望每秒执行一次do_something_2()(或每秒+一些小开销)。
注意:不要被while True 结构吓到,它被设计为在树莓派上连续运行:)
【问题讨论】:
-
当
get_external_thing()完成后,您想在下一次迭代中再次重新运行它吗? -
我的实际流程更复杂,但是,如果我的问题是正确的,在
get_external_thing()完成后,我希望do_something_1()被执行,然后externally_gathered_thing设置为无,然后@987654337 @。但同样,这只是一个演示代码。 (我通过在if中添加externally_gathered_thing来更新代码) -
再一次,在完成之后,
get_external_thing()是否应该在下一次迭代中重新运行? -
是的,这将是首选流程。
-
TBH,在下一次迭代中不重新运行它不会有那么大的问题。
标签: python concurrency python-asyncio