- 主题:请问一下协程怎么替代while true
你的websocket是多个连接吗?如果只有一个,这个recv/handle是异步的,效果和执行多
个read_from_websocket 一样
如果是多个,你可以用
tasks.append(read_from_websocket(uri[i]))
asyncio.gather(*tasks)
这样并行
【 在 migrant 的大作中提到: 】
: 我是希望
: async def read_from_websocket(uri):
: async with websockets.connect(uri) as websocket:
: ...................
--
FROM 119.139.197.*
【 在 iwannabe 的大作中提到: 】
: 你的websocket是多个连接吗?如果只有一个,这个recv/handle是异步的,效果和执行多
: 个read_from_websocket 一样
: 如果是多个,你可以用
: ...................
是一个数据服务器,多个客户端去连接,我是了你说的这个办法,不知道为啥收不到数据,如果task只有一个,是能收到数据的
--
FROM 112.45.96.*
好长时间没见了老鱼你协程水平还是不够啊
lz这个场景是个很正常很常见的需求,c#中是Parallel.ForEach,别的语言对照着搜呗,带async的都有,没有等等也会有的
【 在 hgoldfish 的大作中提到: 】
: 看看 asyncio 里面有没有协程池这个东西。
: 如果是 gevent 的话是有协程池的,在 while True 里面可以不断地往协程池里面 submit 任务。这不就是典型的 socket accept() 的应用场景吗?
:
--
FROM 123.116.219.*
奇怪,如果要真正的并行的话,不是需要独占CPU吗
你如果是四核的话,也就四个程序并行的
【 在 migrant 的大作中提到: 】
:
: 是并行计算,按理说协程计算不占优势的,不过我试过多进程,太占资源了,我用来跑程序的云服务器配置比较低,我要并行运行的程序比较多,所以多进程不适合
--
FROM 8.219.235.*
问题是他这个程序似乎要一直运行而不退出
Parallel.ForEach的每个任务默认会运行一段时间结束吧
【 在 leadu 的大作中提到: 】
: 好长时间没见了老鱼你协程水平还是不够啊
: lz这个场景是个很正常很常见的需求,c#中是Parallel.ForEach,别的语言对照着搜呗,带async的都有,没有等等也会有的
:
--
FROM 8.219.235.*
while True:
await asyncio.sleep(0) // 或者 0.01
【 在 migrant (migrant) 的大作中提到: 】
: 发信人: migrant (migrant), 信区: Python
: 标 题: 请问一下协程怎么替代while true
: 发信站: 水木社区 (Fri May 26 10:07:32 2023), 转信
:
--
FROM 183.179.53.*
协程不退出就行了,协程本来也不保证退出时间。后台会自动增加线程池内线程数满足新的调度
【 在 gfkid 的大作中提到: 】
: 问题是他这个程序似乎要一直运行而不退出
: Parallel.ForEach的每个任务默认会运行一段时间结束吧
: :
--
FROM 123.116.219.*
核数是固定的,如果不退出的线程超过了核数怎么办呢?
【 在 leadu 的大作中提到: 】
: 协程不退出就行了,协程本来也不保证退出时间。后台会自动增加线程池内线程数满足新的调度
:
--
FROM 8.219.235.*
如果是io密集的,协程数超了没有关系,多占一点点内存而已
如果是cpu密集的,你得想想为啥你会允许它超过核数
foreach有个参数控制最大并发协程数
【 在 gfkid 的大作中提到: 】
: 核数是固定的,如果不退出的线程超过了核数怎么办呢?
: :
--
FROM 123.116.219.*
await呗
【 在 migrant 的大作中提到: 】
: 我有一个函数:
:
: async def fn():
: while true:
: print(111)
:
: 我想用协程的方法并行运行这个函数,多个任务启动起来了,但是运行起来后就因为while ture的原因只运行其中一个任务了,这个地方我应该怎么替换掉while
: ..................
发自「今日水木 on iPhone 13」
--
FROM 119.4.253.*