python如何处理并发

Mutilprocessing 包提供本地和远程并发性,通过子进程而不是线程有效地侧移“全局解释器锁”。进程是通过创建一个Process对象,然后调用start方法产生

上下文启动法:

  • spawn:父进程启动一个新的python解释器,子进程只会进行进程对象run()
  • fork:父进程os.fork() 来分叉python解释器,子进程与父进程有效性相同,父进程所有资源都由子进程继承。(多线程间存在安全性问题)
  • forkserver:当使用此方法时,服务进程启动。无论何时需要新进程,父进程都会连接到服务器并请求它分一个新子进程。forkserver是单线程的,因此可以安全使用os.fork()。没有不必要的资源被继承
import mutilprocessing as mp
mp.set_start_method(‘spawn’) 只能使用一次
mp.get_context(‘spawn’) 可以多次使用

进程间交换对象

Mutilprocessing 支持两种进程间通信信道:

  • 队列(queue):
    • 类似克隆,队列是线程和进程(安全)
  • 管道(pipe):
    • 函数pipe()返回一对由管道连接的连接对象,默认情况下是双向的。
a, b = pipe()

通过返回两个对象表示管道两端,每个对象都有send()和rec()两种方法。
如果两进程或两线程试图同时读取或同时写入管道了另一端,数据可能损坏。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容