【python】python进程、线程、协程和什么时候使用
-
https://blog.csdn.net/bandaoyu/article/details/90583629
-
总结:
-
写入文件时,该用什么?
同一时间,只能有一个进程,对文件进行写入操作。这是操作系统的设定。
多进程写入文件: 由操作系统随机决定哪个进程来写入操作。
因为这种决策是随机,完全无序的。所以写入文件时,会造成文件顺序的错乱。
比如:一共十个进程,每个进程写十个字,写十个字算是一个完整的操作。一个字全是一个执行单元。
那么一个进程可能写完十个字,也就是一个完整的操作后,由系统决定切换到另外一个进程。
也可能一个进程1写三个字,系统就切换另外一个进程3来进行操作。进程3写了二个字,系统切换到进程5,继续写入。
这样就造成了文件内容的错乱。一行内有进程1的三个字,进程3的两个字,进程5的字。
解决办法:- 对写入操作 进行加锁
就是说:对当前进行写入操作的进程锁定,直到该进程写完十个字,也就是一个完成的操作,后解除该进程的锁定,放它离开。切换到另外一个进程来操作。
因为一次只能一个进程执行写入操作,而且必须执行完成完整的操作,才允许切换。所以不会造成文件内容的混乱。
但是加锁一般会完造成程序的执行效率下降。而且,如果写入操作分散在整个代码的多处,
总不能把整个代码都锁起来吧,这样岂不是又成单进程了么?
所以:把写入操作抽象出来为单独的一个函数,这样对单独的一个函数加群,这样问题就不大了。
更优雅的方法:使用multiprocessing的回调函数。
1、把写入操作抽象为单独的一个函数
2、把进程需要写入的内容,作为返回值返回
3、使用回调函数写入进程返回内容。
- 对写入操作 进行加锁
-
url爬取时,该用什么?
-
读取文件时,该用什么?
读取超大的文本文件,使用多进程分块读取。
-