Python_进程的创建和简单应用
进程的创建和简单应用
1、进程简单创建实例(os.fork()用于linux)
#!/user/bin/python #encoding=utf-8 import os print (os.getpid())#自己本身的进程id pid = os.fork() # 创建一个子进程,仅能在linux下运行 print (pid) #子进程id和0 if pid == 0:#子进程id 一般为0 print ('I am child process (%s) and my parent is %s.' % (os.getpid(), os.getppid())) else: print ('I (%s) just created a child process (%s).' % (os.getpid(), pid))
vi编辑器相关:
:/***(搜索***):
n:向后找
:?print(向前搜索***)
多线程:多IO 的处理,不用做计算,直接获取数据
多进程:
携程:单线程机制,出现IO时,自动切换到别的任务
单线程出现IO时,会死等
2、简单运用
(一)
#coding=utf-8 import multiprocessing def do(n): #获取当前线程的名字 name = multiprocessing.current_process().name print(name,'starting') print("worker",n) return if __name__ == '__main__': numList = [] for i in range(5): p = multiprocessing.Process(target=do,args=(i,)) numList.append(p) p.start() #p.join() print("Process end.") for i in numList: i.join() print(numList)
(二)
#coding=utf-8 import multiprocessing def do(n) : #获取当前线程的名字 name = multiprocessing.current_process().name print(name,'starting') print("worker ", n) return if __name__ == '__main__' : numList = [] for i in range(5) : p = multiprocessing.Process(target=do, args=(i,)) numList.append(p) p.start() p.join() #p进程,通过join方法通知主进程死等我结束,再继续执行 print("Process end.") for i in numList: i.join()#每一个进程执行结束后,才会开始下一次循环
#循环结束了,也就说5个进程全部执行完毕了,然后在执行print语句。
print(numList)
3、小例子:进程模式创建文件
5个进程,新建5个文件,每个文件写100行自定义的文字
#coding=utf-8 import multiprocessing def do(file_path) : with open(file_path,"w") as fp: for i in range(100): fp.write("gloryroad"+str(i)+"\n") if __name__ == '__main__' : numList = [] for i in range(5) : p = multiprocessing.Process(target=do, args=( "e:\\pic\\"+str(i)+".txt",)) numList.append(p) p.start() #p.join() #p进程,通过join方法通知主进程死等我结束,再继续执行 print("Process end.") for i in numList: i.join()#每一个进程执行结束后,才会开始下一次循环 #循环结束了,也就说5个进程全部执行完毕了,然后在执行print语句。 print("done!")
1 生成子进程,给它指定一个完成的任务(一个函数)
2 生成所有的子进程,并start
3 join一下所有的子进程,等待所有的子进程执行完毕了,在执行主进程的剩余代码
4、os.fork()和multiprocessing结合使用
#!/usr/bin/python # -*- coding: utf-8 -*- from multiprocessing import Process import os import time def sleeper(name, seconds): print("Process ID# %s" % (os.getpid())) print("Parent Process ID# %s" % (os.getppid())) #仅支持在linux上,一个进程会有父进程和自己的ID,windows上就没有父进程id print("%s will sleep for %s seconds" % (name, seconds)) time.sleep(seconds) # if __name__ == "__main__": child_proc = Process(target = sleeper, args = ('bob', 5)) child_proc.start() print("in parent process after child process start") print("parent process about to join child process") child_proc.join() print("in parent process after child process join" ) print("the parent's parent process: %s" % (os.getppid()))
运行结果