006-Process-Pool-Queue
Posted hhj-study-10years
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了006-Process-Pool-Queue相关的知识,希望对你有一定的参考价值。
1. 如果程序中使用了多进程,子进程一般都放在主进程前面执行(开启进程守护后,必须放在前面)
2. 如果要使用进程守护,那么要在启动进程前设置 : sub_process.daemon = True
3. 个人理解 : 让每个进程/线程中只有一个能产生阻塞的代码(保证可能产生阻塞的代码在不同进程/线程中)
4. 当创建一个子进程时,实际上是对主进程进行了拷贝(拷贝时主进程有什么,拷贝后子进程就有什么,但是接下来在子进程中的操作,不会影响到主进程中的内容,比如变量,函数的调用等等),所以,进程之间是不会共享数据的
5. 进程之间不共享数据(不共享全局变量),如果想在进程间通信,要使用 Queue
6. 进程池 Pool : 开启进程池后,如果不打印进程id,是看不出来有几个进程在执行的,但是进程池会自动根据执行内容来分配到底让几个进程来执行,进程池中的进程数不一定总是满的
7. Pool 的规定用法 : pool.close() pool.join()
8. 进程池中,apply() 是同步(每个进程逐个执行)、阻塞的;apply_async() 是异步(进程池中的所有进程同时执行)、非阻塞的
9. apply_async() 会返回一个结果对象,这个对象的 wait() 方,法可以让主进程等待 apply_async() 执行结束后再向下执行(会变成同步)。线程池内通信 : Manager().Queue()
10. 同步 : 按照顺序逐个执行,异步 : 一起执行
11. TCP/UDP 配合进程/线程使用时,做好流量控制(e.g. 从服务器拷贝文件夹到客户端,读取发送太快,导致把所有文件的内容写到一个文件中,解决办法 : 读取/发送后 sleep(0.1))
以上是关于006-Process-Pool-Queue的主要内容,如果未能解决你的问题,请参考以下文章