![]() | 1 muzuiget 2021-07-04 13:21:01 +08:00 WebWorkers 本身就是进程,你用再起一个 Python 不也是一样。 |
![]() | 3 muzuiget 2021-07-04 13:27:16 +08:00 WebWorkers 之间通信也是要序列化对象,而不是共享内存,所以它用起来就是个“进程”。 |
![]() | 4 TypeError 2021-07-04 13:37:00 +08:00 via Android ![]() Concurrent.futures processpoolexecutor |
![]() | 5 learningman 2021-07-04 15:05:11 +08:00 via Android @muzuiget 可以共享内存的,SharedMemoryBuffer 吧好像是这个。把指针传过去就行了。 |
![]() | 6 tkmiles 2021-07-04 15:12:35 +08:00 当你纠结于 GIL 同时不知道怎么规避它或者规避它的开销不可容忍的时候, 这个时候你已经不需要 python 了 |
![]() | 7 lesismal 2021-07-04 15:18:15 +08:00 出门左转,golang 欢迎你 |
![]() | 8 ipwx 2021-07-04 15:38:39 +08:00 |
![]() | 9 learningman 2021-07-04 16:14:07 +08:00 via Android @ipwx 我说 js 你发个 python 的文档给我干啥。。。 |
![]() | 10 tabris17 2021-07-04 16:42:32 +08:00 via iPhone gil 警告,py 多进程也凑合用吧 |
![]() | 11 matrix67 2021-07-04 17:04:43 +08:00 CPU 密集型操作不要选择用 python |
![]() | 12 zeroDev 2021-07-04 17:11:16 +08:00 via Android 用进程和协程 |
![]() | 13 abersheeran 2021-07-04 18:47:11 +08:00 @learningman 他的意思是 Python 多进程也可以共享内存。 对于这种脚本语言来说,共享内存里的对象和共享内存,差别还是蛮大的。你能直接从共享内存里处理一个巨复杂的对象吗?好像比较难吧。不像 C,整个内存排布都是固定的,想怎么玩就怎么玩。 |
![]() | 15 Sasasu 2021-07-04 20:12:41 +08:00 ![]() 你把 python 想象成巨大配置文件,用来描述一个数据流的过程发给 C++,然后 C++ 去跑。这是 "处理 CPU 密集型操作" 的标准流程。 |
![]() | 16 wwqgtxx 2021-07-04 20:34:42 +08:00 @abersheeran 巨复杂的对象直接用 multiprocessing.Manager 不就得了 |
![]() | 17 XiaoxiaoPu 2021-07-04 20:52:23 +08:00 @wwqgtxx 能存放复杂对象的 Manager 是基于进程间通信的;使用共享内存的 Manager 只支持固定大小的简单类型数组 |
![]() | 18 abersheeran 2021-07-04 20:54:22 +08:00 @wwqgtxx 你要是真用过,你就会发现这玩意疯狂上锁,据我的测试,Manager 所在进程跑到 100%,其他进程只有 45% 的样子。一核有难,七核围观。 |
![]() | 20 wwqgtxx 2021-07-04 23:15:37 +08:00 @abersheeran Manager 疯狂上锁倒是真的,以前在做工程的时候还遇到过 Manager 内部线程泄露的问题,最后自己魔改了 Manager 的源码才解决的问题。Manager 所在进程跑到 100%的原因还是因为所有的该对象的抽中是在 Manager 所在进程操作的,其他进程只是调用,自然 CPU 占用低 @XiaoxiaoPu 目前也没有语言能实现动态大小的复杂对象基于共享内存吧,使用 RPC 调用方式基本上是最简单的实现方式了 |
![]() | 22 yolee599 2021-07-05 08:53:09 +08:00 via Android 你需要的不是 python,而是一个支持线程的编程语言 |
![]() | 24 no1xsyzy 2021-07-05 09:25:55 +08:00 |
26 James369 OP @yolee599 #22 Python 本身很好用,灵活快速,第三方库又多,又简单易上手。但是就是有这个小缺陷。 相反,别的语言都在不断的进化。比如 C++,加了很多现代特性,什么右值转移、auto 类型推导、lambda 编程、async 异步编程等等。 我觉得 C++还可以再活 100 年。 |
27 hunk 2021-07-05 21:40:27 +08:00 via iPhone 为了多线程,果断换用 go,协程眨眼间完事 |
28 Rwing 2021-07-05 21:54:14 +08:00 c#欢迎你,另外 python 不是也有 async/await 吗? |