Python基础之九进程和线程
2017-02-03 08:34
363 查看
import os print('Process (%s) start...' % os.getpid()) pid = os.fork() if pid == 0: print('I an child process (%s) and my parent is %s' % (os.getpid(), os.getpid())) else: print('I (%s) just created a child process (%s).' % (os.getpid(), pid)) ''' multiprocessing ''' 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()方法启动,这样比fork()简单 p = Process(target=run_proc, args=('test',)) print('Child process will start') p.start()#启动进程 p.join()#等待子进程结束后再继续往下运行,通常用于进程间的通病 print('Child process end.') ''' Pool 如果需要启动大量子进程,可以用进程池的方式批量创建子进程 ''' 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('Wating for all subprocesses done...') p.close() p.join() print('All subprocesses done.') ''' 子进程 ''' import subprocess print('$ nslookup www.python.org') r = subprocess.call(['nslookup', 'www.python.org']) print('Exit code:', r) ''' 进程间通信 ''' 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() ''' 多线程 多任务可以有多个进程完成, 也可以由一个进程内的多线程完成 ''' import time, threading print('>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>以下是多线程执行代码') #新线程执行的代码 def loop(): print('thread %s is runing...' % threading.current_thread().name) n = 0 while n < 5: n = n + 1 print('thread %s >>> %s' % (threading.current_thread().name, n)) time.sleep(1) print('thread %s ended.' % threading.current_thread().name) print('thread %s is runing...' % threading.current_thread().name) t = threading.Thread(target=loop, name='LoopThread') t.start() t.join() print('thread %s ended.' % threading.current_thread().name) ''' Lock 多线程和多进程最大的不同在于,多进程中,同一个变量各自有一份拷贝存在于每个进程中,互不影响, 而多线程中,所有变量都由所有线程共享,所有,任何一个变量都可以被任何一个线程修改, 因此,线程之间共享数据最大危险在于多个线程同时修改一个变量 ''' blance = 0 lock = threading.Lock() def run_thread(n): for i in range(100000): #现获取锁 lock.acquire() try: pass #修改something finally: pass #改完释放锁
更多精彩内容访问个人站点www.gaocaishun.cn
相关文章推荐
- Python基础:进程、线程、协程(1)
- python基础-信号量Semaphore(进程_线程)、事件Event(进程_线程)
- Python基础-进程和线程
- python基础-线程和进程
- python——进程线程、与协程基础概述
- Python基础学习(5)网络编程socket、文件上传、粘包问题、socketserver、IO多路复用、线程与进程、进程池、线程池、上下文管理、协程
- python基础之线程、进程、协程
- python基础-守护进程、守护线程、守护非守护并行
- python基础===进程,线程,协程的区别(转)
- 进程和线程的基础知识——Python学习笔记11
- Python基础—线程、进程和协程
- Python基础 - 第九天 - paramiko模块、进程、线程
- python 线程 基础
- java,python守护进程守护线程Daemon(经典好文)
- Python 中的线程与进程(一)
- 进程与线程(基础知识)
- 与RTX相关的进程与线程基础知识
- Python线程基础
- Android基础之进程和线程 AsyncTask , Handler
- 【基础知识】线程与进程的区别