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()))

运行结果

posted @ 2019-08-02 01:54  翻滚的小强  阅读(149)  评论(0编辑  收藏  举报