为什么asyncio(source)中的> setDT(dt)[,mean(Activity),by=.(Sex,Genotype)]
Sex Genotype V1
1: male ff 2.0835
2: male fs 2.6760
3: female ff 3.5270
4: female ss 3.6200
方法正在检查当前线程是否为主线程(请参见下面的代码段中的注释)?
get_event_loop
答案 0 :(得分:2)
为方便起见,asyncio支持自动创建事件循环,而无需执行对new_event_loop()
和set_event_loop()
的调用。由于事件循环的创建成本适中,并且会消耗一些OS资源,因此它不是在导入时自动创建的,而是按需自动创建的,尤其是在第一次调用get_event_loop()
时。 (asyncio.run
已废弃此功能,该功能始终会创建一个新的事件循环,然后自动创建的事件循环会导致problems。)
但是,此便利是为主线程保留的-任何其他线程都必须显式设置事件循环。造成这种情况的原因可能有几种:
get_event_loop()
来为该线程分配“主”(自动创建的)事件循环; 还可以通过在每个线程中自动创建一个调用get_event_loop()
的新事件循环来避免这些问题,但是这很容易意外地创建了多个协程为无法相互通信,这将与asyncio的设计背道而驰。因此,剩下的选择是让代码对主线程进行特殊处理,从而鼓励开发人员使用该线程执行异步代码。