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 1
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 1
你把 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 吗?
|