- 主题:请问一下协程怎么替代while true
好长时间没见了老鱼你协程水平还是不够啊
lz这个场景是个很正常很常见的需求,c#中是Parallel.ForEach,别的语言对照着搜呗,带async的都有,没有等等也会有的
【 在 hgoldfish 的大作中提到: 】
: 看看 asyncio 里面有没有协程池这个东西。
: 如果是 gevent 的话是有协程池的,在 while True 里面可以不断地往协程池里面 submit 任务。这不就是典型的 socket accept() 的应用场景吗?
:
--
FROM 123.116.219.*
协程不退出就行了,协程本来也不保证退出时间。后台会自动增加线程池内线程数满足新的调度
【 在 gfkid 的大作中提到: 】
: 问题是他这个程序似乎要一直运行而不退出
: Parallel.ForEach的每个任务默认会运行一段时间结束吧
: :
--
FROM 123.116.219.*
如果是io密集的,协程数超了没有关系,多占一点点内存而已
如果是cpu密集的,你得想想为啥你会允许它超过核数
foreach有个参数控制最大并发协程数
【 在 gfkid 的大作中提到: 】
: 核数是固定的,如果不退出的线程超过了核数怎么办呢?
: :
--
FROM 123.116.219.*
比如要10个协程,直接调用10次,最后task.whenall就得了,cpu不够lz自己加呗,反正cpu没有浪费
foreach也可以,10个10个的策略来,跑完100个策略foreach就退出了,这100个策略跑几天也没有关系
【 在 hgoldfish 的大作中提到: 】
: Python 也有这个东东。但楼主一直到现在都没讲清楚,他要的是并行多进程计算还是并发多协程。而且 for each 也满足不了楼主想要的一直不退出这个需求。
:
--
FROM 123.116.219.*
那可能就是我最开始说的,语言没有就要等等了...
【 在 hgoldfish 的大作中提到: 】
: c#, java (project loom), go 都能自动在线程间调度协程的。python 没有这个功能。所以我已经和楼主说了 multiprocessing.pool.Pool 可以用,里面有 apply() 和 map(), imap() 可用。
: 你不懂 Python,拿个 c# 代码给楼主有啥用啊?
:
--
FROM 123.116.219.*