我在concurrency is not parallelism幻灯片上看到golang可以这样做:
func main() {
go boring("Boring!")
fmt.Println("I'm listening.")
time.Sleep(2 * time.Second)
fmt.Println("You're boring; I'm leaving.")
}
结果看起来像这样
I'm listening.
boring 0
boring 1
boring 2
boring 3
boring 4
boring 5
You're boring; I'm leaving.
Python异步循环可以这样做吗?我坚持loop.run_forever
它会阻止主要功能:
import asyncio
import random
import time
import itertools
async def boring(msg):
for i in itertools.count(0):
print(msg, i)
await asyncio.sleep(random.random() % 1e3)
if __name__ == '__main__':
loop = asyncio.get_event_loop()
asyncio.ensure_future(boring('boring!'))
loop.run_forever()
print('Hello')
time.sleep(2)
print('Bye.')
loop.stop()
然后运行
boring! 0
boring! 1
boring! 2
boring! 3
boring! 4
boring! 5
boring! 6
boring! 7
boring! 8
boring! 9
python异步循环可以是异步吗?
答案 0 :(得分:0)
loop.run_forever()
如果阻止执行。由于您的代码在单个线程中运行,您需要将代码修改为以下内容:
async def boring(msg):
for i in itertools.count(0):
print(msg, i)
await asyncio.sleep(random.random() % 1e3)
async def hello(task):
print('Hello')
await asyncio.sleep(2)
print('Bye.')
task.cancel()
if __name__ == '__main__':
loop = asyncio.get_event_loop()
t = asyncio.ensure_future(boring('boring!'))
loop.run_until_complete(hello(t))
loop.stop()