con*_*lee 37 unix parallel-processing concurrency pipe
我正在从网上抓取数据,并且我有几个并行运行刮刀的过程.
我希望每个进程的输出最终都在同一个文件中.只要文本行保持完整并且不会相互混淆,行的顺序无关紧要.在UNIX中,我可以使用>>运算符将每个进程的输出管道传输到同一个文件吗?
rai*_*inz 12
你可以做的一个有趣的事情是使用gnu parallel:http://www.gnu.org/s/parallel/例如,如果你是蜘蛛网站:
stackoverflow.com, stackexchange.com, fogcreek.com
Run Code Online (Sandbox Code Playgroud)
你可以做这样的事情
(echo stackoverflow.com; echo stackexchange.com; echo fogcreek.com) | parallel -k your_spider_script
Run Code Online (Sandbox Code Playgroud)
并且输出是并行缓冲的,因为-k选项按照上面站点列表的顺序返回给你.一个真实的例子(基本上是从第二个并行截屏视频复制的):
~ $ (echo stackoverflow.com; echo stackexchange.com; echo fogcreek.com) | parallel -k ping -c 1 {}
PING stackoverflow.com (64.34.119.12): 56 data bytes
--- stackoverflow.com ping statistics ---
1 packets transmitted, 0 packets received, 100.0% packet loss
PING stackexchange.com (64.34.119.12): 56 data bytes
--- stackexchange.com ping statistics ---
1 packets transmitted, 0 packets received, 100.0% packet loss
PING fogcreek.com (64.34.80.170): 56 data bytes
64 bytes from 64.34.80.170: icmp_seq=0 ttl=250 time=23.961 ms
--- fogcreek.com ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 23.961/23.961/23.961/0.000 ms
Run Code Online (Sandbox Code Playgroud)
无论如何,ymmv
一般来说,没有.
在Linux上,这可能是可能的,只要满足两个条件:每行写入一个操作,并且该行不长于PIPE_SIZE(通常与PAGE_SIZE相同,通常为4096).但是......我不会指望那个; 这种行为可能会改变.
最好使用某种真实的日志记录机制,比如syslog.
绝对不,我有一个日志管理脚本,我认为它可以工作,并且它确实工作,直到我将其移至负载不足的生产服务器。这不是美好的一天……但基本上,有时你会得到完全混乱的台词。
如果我尝试从多个源捕获,那么拥有多个文件“纸质轨迹”会更简单(并且更容易调试),并且如果我需要一个整体日志文件,请根据时间戳连接(您正在使用时间-邮票,对吧?)或者正如 liori 所说,系统日志。
| 归档时间: |
|
| 查看次数: |
7950 次 |
| 最近记录: |