多进程

在Unix/Linux下,为我们提供了类似c中<unistd.h>头文件里的的fork()函数的接口,这个函数位于os模块中,相同与c中类似,对于父进程fork()调用返回子进程ID,对于子进程返回0

import os, time

pid = os.fork()
if pid == 0:
while True:
print 'child process'
time.sleep(1)
else:
while True:
print 'parent process'
time.sleep(3)

考虑到Windows并没有这个调用,python为我们提供了跨平台的版本号。这就是multiprocessing模块。通过multiprocessing模块中的Process类可实现跨平台的多进程。使用方法很easy

#coding:utf-8
from multiprocessing import Process
import os, time def handler(args):
print 'process parameter is %s' % args
while True:
print 'child process'
time.sleep(1) if __name__=='__main__':
print 'parent process is %d' % os.getpid()
child_proc = Process(target = handler, args=('test parameter',)) #指定子进程開始运行的函数
child_proc.start()
while True:
print 'parent process'
time.sleep(3)

注意:若不加if __name__=='__main__'。子进程启动后会将模块内的代码再运行一遍。为避免不必要的错误,应该加上它

Python为了更方便的使用多进程还提供了进程池Pool, 位于multiprocessing模块中,进程池用于对于并发响应要求较高的条件中,预先分配进程,节省了处理过程中fork的开销

关于很多其它进程池的内容可參考 http://blog.csdn.net/aspnet_lyc/article/details/38946915#t3  中的TCP预先派生子进程server

#coding:utf-8
from multiprocessing import Pool
import os, time, random def handler(proc_args):
print proc_args if __name__ == '__main__':
pool = Pool(4) #设置进程池中的进程数
for loop in range(4):
pool.apply_async(handler, args=(loop,)) #apply_async(func,args),从进程池中取出一个进程运行func,args为func的參数。返回一个 AsyncResult的对象。对该对象调用get()方法能够获得结果。 pool.close() #不在往进程池中加入进程
pool.join() #等待全部子进程结束
print 'All child processes done'

多线程

Python中对于多线程提供了thread和threading模块, threading对thread进行了封装,更易用。python官网的描写叙述例如以下

This module provides low-level primitives for working with multiple threads (also called light-weight processes or tasks) — multiple threads of control sharing their global data space. For synchronization, simple locks (also called
mutexes or binary semaphores) are provided. The threading module provides an easier to use and higher-level threading API built on top of this module

调用thread模块中的start_new_thread()函数来产生新线程

import thread

def thread_handler(args):
print args if __name__ == '__main__':
thread.start_new_thread(thread_handler, ('test parameter',))
while True:
pass

将线程函数传入并创建Thread实例。然后调用start()创建线程并运行

import threading

def thread_handler(args):
print args if __name__ == '__main__':
th1 = threading.Thread(target=thread_handler, args=('test parameter 1',))
th2 = threading.Thread(target=thread_handler, args=('test parameter 2',))
th1.start()
th2.start()
th1.join()
th2.join()
print 'All threads ended'

最新文章

  1. [bzoj1597][usaco2008 mar]土地购买 (动态规划+斜率优化)
  2. SharePoint 2013技巧分享系列 - Active Directory同步显示用户照片
  3. Linux ACL
  4. HTML中表格元素TABLE,TR,TD及属性的语法
  5. Python基础、collections补充
  6. C#基础总结之六 DataTable (临时表/数据源) 和Datatable 名片练习
  7. 装载: Matlab 提取矩阵 某一行 或者 某一列 的方法
  8. ADT在线安装
  9. 用JSTL简化Java Web开发
  10. java 构造器学习笔记
  11. 如何在Linux上编译c++文件
  12. [数据库] windows server 2003下mysql出现10048错误的解决办法 Can&#39;t connect to MySQL server on &#39;127.0.0.1&#39; (10048)(抄)
  13. .net程序员面试小结(内附一些面试题和答案)
  14. React-Native之截图组件view-shot的介绍与使用
  15. QGis+QT5.9+VS2017源码编译
  16. [转]ubuntu安装skype
  17. java实例检查端口是否被占用
  18. Hacking Using Beef-Xss
  19. 【Spark】Sparkstreaming-共享变量-缓存RDD-到底是什么情况?
  20. 3.1_分类算法之k-近邻

热门文章

  1. Android.mk中添加宏定义【转】
  2. 寒武纪芯片——有自己的SDK,支持tf、caffe、MXNet
  3. 【撸码caffe 一】syncedmen.hpp
  4. sublime-text 编译C
  5. 关于sql2008的数据库导入问题的收集
  6. LinkedHashMap做缓存
  7. javascript设计模式-继承
  8. node.js date-utils
  9. MAVEN学习笔记之私服Nexus(2)
  10. 如何用PYTHON代码写出音乐