python基础15

1.创建新的进程

from multiprocessing import Process
import os

子进程要执行的代码

def run_proc(name):
   print('Run child process %s (%s)...' % (name, os.getpid()))

if __name__=='__main__':
    print('Parent process %s.' % os.getpid())
   #创建process实例,然后调用start()方法,这样开启进程
   p = Process(target=run_proc, args=('test',))
   print('Child process will start.')
   p.start()
   p.join()
   print('Child process end.')

2.创建大量的子进程

from multiprocessing import Pool
import os, time, random

def long_time_task(name):
  print('Run task %s (%s)...' % (name, os.getpid()))
  start = time.time()
  time.sleep(random.random() * 3)
  end = time.time()
  print('Task %s runs %0.2f seconds.' % (name, (end - start)))

if __name__=='__main__':
	print('Parent process %s.' % os.getpid())
  p = Pool(4)
  for i in range(5):
     p.apply_async(long_time_task, args=(i,))
  print('Waiting for all subprocesses done...')
 #调用close()方法后就不会添加线程了
  p.close()
  #调用join()方法会等待所有的线程执行完毕
  p.join()
  print('All subprocesses done.')

3.进程间通讯

from multiprocessing import Process, Queue
import os, time, random

 写数据进程执行的代码:

def write(q):
  print('Process to write: %s' % os.getpid())
  for value in ['A', 'B', 'C']:
  	  print('Put %s to queue...' % value)
  	  q.put(value)
  	  time.sleep(random.random())

 读数据进程执行的代码:

def read(q):
  print('Process to read: %s' % os.getpid())
 while True:
  	  value = q.get(True)
 	   print('Get %s from queue.' % value)

if __name__=='__main__':
	# 父进程创建Queue,并传给各个子进程:
  q = Queue()
   pw = Process(target=write, args=(q,))
   pr = Process(target=read, args=(q,))
   # 启动子进程pw,写入:
   pw.start()
   # 启动子进程pr,读取:
   pr.start()
   # 等待pw结束:
   pw.join()
   # pr进程里是死循环,无法等待其结束,只能强行终止:
   pr.terminate()

猜你喜欢

转载自blog.csdn.net/yuezheyue123/article/details/84753466