1.进程指的是运行中的程序,时程序+用到的资源,一个程序可以有多个进程,使用进程时,导入multiprocessing,使用multiprocessing.Pross(target= )创建进程。使用方法与线程相同。
import multiprocessing
import time
def sing():
while True:
print("------------1--------")
time.sleep(1)
def dance():
while True:
print("------------2--------")
time.sleep(1)
def main():
t1 = multiprocessing.Process(target=sing)
t2 = multiprocessing.Process(target=dance)
t1.start()
t2.start()
if __name__ == "__main__":
main()
输出结果:
------------1--------
------------2--------
------------1--------
------------2--------
无限循环
2.进程与线程的区别:进程时资源分配的单位,线程是系统调度的过程,进程之间不共享资源。
举例来说就是打开一个音乐播放器就是一个进程,同时实现下载和播放就是两个线程,下载之后的音乐可以播放就是两个线程之间的资源共享。
Queue用于进程之间通信
q = multiprocessing.Queue(线程数目)
q.put()写入
q.get()获取
q.full()判断是否写满
q.empty()判断是否读完
import multiprocessing
import time
def download_data(p):
data = [11,22,33]
for temp in data:
p.put(temp)
print("------下载完毕--------")
def analysis_data(p):
waitting_list = list()
while True:
data = p.get()
waitting_list.append(data)
if p.empty():
break
print("------分析完毕---------")
print(waitting_list)
def main():
q = multiprocessing.Queue(3)
p1 = multiprocessing.Process(target=download_data,args=(q,))
p2 = multiprocessing.Process(target=analysis_data,args=(q,))
p1.start()
p2.start()
if __name__ == "__main__":
main()
输出结果:
------下载完毕--------
------分析完毕---------
[11, 22, 33]
3.任务数量不确定,用进程池,导入multiprocessing的Pool类