- 主题:请问一下协程怎么替代while true
协程解决的是io密集型应用,如果是运算密集型就不用协程了
【 在 migrant 的大作中提到: 】
: 其实我用来做交易的一个东西,那个函数相当于一个策略,用到不同的品种上,websocket接收数据,然后死循环不停计算,如果用进程太占资源了
: --
发自「今日水木 on iPhone 13」
--
FROM 119.4.253.*
多进程占资源是指什么吗?
依我看,如果你有 16 个核心的话,也不过多占了 16 个 Python 进程的内存空间而已。如果你用 multiprocessing 模块,可以把数据放到共享内存里面,不会太占用资源的吧。
【 在 migrant 的大作中提到: 】
: 是并行计算,按理说协程计算不占优势的,不过我试过多进程,太占资源了,我用来跑程序的云服务器配置比较低,我要并行运行的程序比较多,所以多进程不适合
--
FROM 117.24.94.*
【 在 hgoldfish 的大作中提到: 】
: 多进程占资源是指什么吗?
: 依我看,如果你有 16 个核心的话,也不过多占了 16 个 Python 进程的内存空间而已。如果你用 multiprocessing 模块,可以把数据放到共享内存里面,不会太占用资源的吧。
:
云服务器,最开始只有两个核心。。。后面加了两个,同时要运行几十个策略
--
FROM 112.45.96.*
【 在 fanci 的大作中提到: 】
: while True:
: await asyncio.sleep(0) // 或者 0.01
试了,还是跳不出来,同时只运行了一个
--
FROM 112.45.96.*
【 在 hmgo1988 的大作中提到: 】
: await呗
: 发自「今日水木 on iPhone 13」
改成
while True:
do xxx
await asyncio.sleep(0)
还是没用
--
FROM 112.45.96.*
Python 也有这个东东。但楼主一直到现在都没讲清楚,他要的是并行多进程计算还是并发多协程。而且 for each 也满足不了楼主想要的一直不退出这个需求。
【 在 leadu 的大作中提到: 】
: 好长时间没见了老鱼你协程水平还是不够啊
: lz这个场景是个很正常很常见的需求,c#中是Parallel.ForEach,别的语言对照着搜呗,带async的都有,没有等等也会有的
--
FROM 117.24.94.*
【 在 ToSimplicity 的大作中提到: 】
: 如果你是想着每次循环就先看看有没有别的活要先干
: 那么可以
: while True:
: ...................
试了不行,还是只能并行运行一个
--
FROM 112.45.96.*
这个不就是进程池的应用吗?你开`cpu_count() * 2 + 1`个进程的进程池处理请求就行了。不会占用很多资源。
【 在 migrant 的大作中提到: 】
: 云服务器,最开始只有两个核心。。。后面加了两个,同时要运行几十个策略
--
FROM 117.24.94.*
比如要10个协程,直接调用10次,最后task.whenall就得了,cpu不够lz自己加呗,反正cpu没有浪费
foreach也可以,10个10个的策略来,跑完100个策略foreach就退出了,这100个策略跑几天也没有关系
【 在 hgoldfish 的大作中提到: 】
: Python 也有这个东东。但楼主一直到现在都没讲清楚,他要的是并行多进程计算还是并发多协程。而且 for each 也满足不了楼主想要的一直不退出这个需求。
:
--
FROM 123.116.219.*
c#, java (project loom), go 都能自动在线程间调度协程的。python 没有这个功能。所以我已经和楼主说了 multiprocessing.pool.Pool 可以用,里面有 apply() 和 map(), imap() 可用。
你不懂 Python,拿个 c# 代码给楼主有啥用啊?
【 在 leadu 的大作中提到: 】
: 比如要10个协程,直接调用10次,最后task.whenall就得了,cpu不够lz自己加呗,反正cpu没有浪费
: foreach也可以,10个10个的策略来,跑完100个策略foreach就退出了,这100个策略跑几天也没有关系
--
FROM 117.24.94.*