前言:
如今小伙伴们对“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无法启动