龙空技术网

2、多进程的调用

动漫IT 70

前言:

如今小伙伴们对“python多进程multiprocessing卡住了”大体比较注意,朋友们都想要了解一些“python多进程multiprocessing卡住了”的相关资讯。那么小编也在网络上搜集了一些对于“python多进程multiprocessing卡住了””的相关知识,希望你们能喜欢,我们一起来学习一下吧!

多进程

由于GIL的存在,python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程。

multiprocessing包是Python中的多进程管理包。与threading.Thread类似,它可以利用multiprocessing.Process对象来创建一个进程。该进程可以运行在Python程序内部编写的函数。该Process对象与Thread对象的用法相同,也有start(), run(), join()的方法。此外multiprocessing包中也有Lock/Event/Semaphore/Condition类 (这些对象可以像多线程那样,通过参数传递给各个进程),用以同步进程,其用法与threading包中的同名类一致。所以,multiprocessing的很大一部份与threading使用同一套API,只不过换到了多进程的情境。

创建一个进程就COPY一份主进程内存地址作为子进程的空间;

调用方式一

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

# @Time : 2018/5/12 10:27

# @Author : CaiChangEn

# @Email : mail0426@163.com

# @Software: PyCharm

from multiprocessing import Process

import time

def f(name):

time.sleep(10)

print('hello', name,time.ctime())

if __name__ == '__main__':

p_list=[]

for i in range(3):

p = Process(target=f, args=('alvin',))

p_list.append(p)

p.start()

for i in p_list:

i.join()

print('end')

调用方式二

进程的守护进程和线程是一样的,只不过现在稍微有点变化,进程变为了p.daemon=True作为一个属性存在,而线程则是p.setDaemon=True作为一个实例方法存在;

from multiprocessing import Process

import time

class MyProcess(Process):

def __init__(self):

super(MyProcess, self).__init__()

#self.name = name

def run(self):

time.sleep(1)

print ('hello', self.name,time.ctime())

if __name__ == '__main__':

p_list=[]

for i in range(3):

p = MyProcess()

p.start()

p_list.append(p)

for p in p_list:

p.join()

print('end')

守护进程

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

# @Time : 2018/5/12 10:27

# @Author : CaiChangEn

# @Email : mail0426@163.com

# @Software: PyCharm

from multiprocessing import Process

import time

class MyProcess(Process):

def __init__(self):

super(MyProcess, self).__init__()

def run(self):

time.sleep(1)

print ('hello', self.name,time.ctime())

if __name__ == '__main__':

p_list=[]

for i in range(3):

p = MyProcess()

p.daemon=True

p.start()

p_list.append(p)

print('end')

进程PID

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

# @Time : 2018/5/12 10:27

# @Author : CaiChangEn

# @Email : mail0426@163.com

# @Software: PyCharm

from multiprocessing import Process

import os

import time

def info(title):

print("title:", title) # 打印参数

print('parent process:', os.getppid()) # 打印父进程的PID

print('process id:', os.getpid()) # 打印进程的PID

def f(name):

info('function f')

print('hello', name)

if __name__ == '__main__':

info('main process line') # 主进程

time.sleep(1) # 主进程

print("------------------") # 主进程

p = Process(target=info, args=('yuan',)) # 生成一个子进程

p.start() # 启动子进程

p.join()

注意:主线程的parent process就是衍生这个进程的PID(在此处是pycharm的pid)

标签: #python多进程multiprocessing卡住了 #python多进程multiprocessing无法启动