1
just1 OP 20 分钟惨案。。
|
2
just1 OP 40 分钟惨案。。。
|
3
vigoss 2016-01-31 13:28:20 +08:00 via Android 1
写内存再延迟写硬盘,话说你的爬虫多高速度呀,加锁都接受不了么,另外 py 原生多线程可是很慢的。
|
4
tinyproxy 2016-01-31 20:56:02 +08:00 via iPad 1
加个 io 线程和 io 任务队列,话说你写爬虫的,为什么不用数据库。。。。
|
7
mengzhuo 2016-01-31 22:58:18 +08:00 1
所有文件分别写到临时文件里,最后再合并
|
8
zjq426 2016-01-31 23:07:41 +08:00 2
单说写的,
看这个日志干嘛用,要是没有特别实时的要求,每个进程自己写自己的日志,事后汇总整理。也可以边写边汇总整理。 要是一条都不能错,还非得多进程用同一个文件,上 flock 。 或者不走网络的话可以用一个代理队列程序写日志,把要写的内容发给代理。 走网络的话写日志会慢,还是每个实例自己写自己的日志好。 |
9
pynix 2016-02-01 03:58:11 +08:00 1
MapReduce
|
11
hrong 2016-02-01 09:49:45 +08:00 via Android 1
日志服务
|
12
paw 2016-02-01 09:54:55 +08:00 1
import logging
..... |
13
sdrzlyz 2016-02-01 10:32:38 +08:00
加锁拖低效率。。。你实测过降低了多少还是想当然?( ps ,当然会降,但对于爬虫来讲,不会说降到不可接受的地步吧)
|
14
hqs123 2016-02-01 11:06:01 +08:00
不懂,收藏学习。
|
15
VYSE 2016-02-01 15:00:17 +08:00
http://stackoverflow.com/questions/1154446/is-file-append-atomic-in-unix
不用 fsync 坑仍然存在 logging 下 socket , http handler 都能更好解决问题 |
16
louk78 2016-02-01 15:10:24 +08:00
将文件切割为 a-f 文件,开 A-F 线程写,最后化零为整
|
17
song0071000 2016-02-01 17:53:02 +08:00
@zjq426 同意
|
18
petelin 2017-08-11 16:19:05 +08:00 1
正好遇到类似的问题, 我发现写日志的时候, 多进程并没有出现问题, 原来写小于 PIPE_BUF 是原子的.
http://me.xrange.top/2017/mutiprocess_append_1_file.html |
19
lostsummer 2018-11-02 16:24:39 +08:00
挖个坟
不知道大家发现没,python3 支持 posix 系统调用 os.pread()/os.pwrite(),以这样的方式打开文件 f = os.open('test', os.O_APPEND|os.O_RDWR) 用 pread/pwrite 读写是可以保证原子性的。 PIPE_BUF 是 POSIX 管道确保读写原子性的最大值, 我不知道和磁盘文件有什么关系。 |