1
firejoke OP 第一次发帖,改了大概 3 次后发现不能更改了......
想再多进程全局变量那里加一个:多进程并不能改变全局变量,只能通过队列 Queue,或者管道 Pipe |
2
testsec 2018-05-12 22:39:51 +08:00 via iPhone
Python 多线程只适用 io 密集场景
|
3
firejoke OP @testsec 是的,但是同一时刻也是只能运行一个线程,都是在等待,所以我觉得,要是文件真的超过 1G 的那种,仍然要用和核心数一样多的进程数,这样就可以同时运行和核心数一样多的线程
|
4
neoblackcap 2018-05-12 23:11:56 +08:00
@firejoke 我建议你贴到外面的网站上,比如 github gist。你贴出来的代码实在影响大家的交流,缩进丢失,非常难以理解。
我觉得你说的多线程没有用大概是实现的一些地方不是那么好,有其他因素抵消了多线程的优势。IO 本身是会释放 GIL,跟是不是多进程没关系 |
5
lukefan 2018-05-12 23:12:23 +08:00 1
Python 的 IO 操作以及部分在底层释放 GIL 锁的类库并不受 GIL 限制.
一般起 CPU 核数的进程针对的是 CPU 密集型操作, 并不是 IO 密集型操作. 本地的文件 IO 一般情况下搞个单独的消费者线 /进程就够了, 多了性能反而差. 一般爆协程、线程处理的 IO 密集型操作的 IO 主要是 socket、PIPE 这类, 并不是文件 IO. |
6
laqow 2018-05-12 23:14:02 +08:00 via Android
感觉 python 的文本处理性能就是屎,特别是 utf8 这种变长编码的,既然不用管内容的话按二进制文件处理会快很多
|
7
Applenice 2018-05-12 23:58:09 +08:00
像楼上们说的 Python 线程还是在 I/O 密集型应用上用的多,另外没有缩进看起来真的难受....0.0
|
8
wspsxing 2018-05-13 04:50:31 +08:00 via Android
依赖缩进的代码不要乱贴,如果不支持代码块就放到 github 之类,gist 在国内被 q 了。
另外,不要用随机读写来加速磁盘访问。 |
9
firejoke OP @neoblackcap 第一次发帖,改了几次发现还是改不了,我贴到 GitHub 看下
|
14
RicardoScofileld 2018-05-14 13:24:29 +08:00
可以试试 Dpark
|
15
firejoke OP |
16
firejoke OP @RicardoScofileld 第一次知道这个框架,好像很好用,我仔细看看
|