多进程

在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'

python 并发编程入门的更多相关文章

  1. Python并发编程之深入理解yield from语法(八)

    大家好,并发编程 进入第八篇. 直到上一篇,我们终于迎来了Python并发编程中,最高级.最重要.当然也是最难的知识点--协程. 当你看到这一篇的时候,请确保你对生成器的知识,有一定的了解.当然不了解 ...

  2. Python并发编程__多进程

    Python并发编程_多进程 multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大 ...

  3. Python并发编程的几篇文章

    Python几种并发实现方案的性能比较 http://www.elias.cn/Python/PyConcurrency?from=Develop.PyConcurrency python并发编程 h ...

  4. Python游戏编程入门

    <Python游戏编程入门>这些文章负责整理在这本书中的知识点.注意事项和课后习题的尝试实现.并且对每一个章节给出的最终实例进行分析和注释. 初识pygame:pie游戏pygame游戏库 ...

  5. 自学Python之路-Python并发编程+数据库+前端

    自学Python之路-Python并发编程+数据库+前端 自学Python之路[第一回]:1.11.2 1.3

  6. Python并发编程二(多线程、协程、IO模型)

    1.python并发编程之多线程(理论) 1.1线程概念 在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程 线程顾名思义,就是一条流水线工作的过程(流水线的工作需要电源,电源就相当于 ...

  7. Python并发编程一(多进程)

    1.背景知识(进程.多道技术) 顾名思义,进程即正在执行的一个过程.进程是对正在运行程序的一个抽象. 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一 ...

  8. 《转载》Python并发编程之线程池/进程池--concurrent.futures模块

    本文转载自Python并发编程之线程池/进程池--concurrent.futures模块 一.关于concurrent.futures模块 Python标准库为我们提供了threading和mult ...

  9. Python并发编程系列之多线程

    1 引言 上一篇博文详细总结了Python进程的用法,这一篇博文来所以说Python中线程的用法.实际上,程序的运行都是以线程为基本单位的,每一个进程中都至少有一个线程(主线程),线程又可以创建子线程 ...

随机推荐

  1. bzoj5277: [Usaco2018 Open]Out of Sorts

    被tkj大爷艹爆了5555整套模拟赛都是神仙思路题 那么这题题解 还有一个神仙做法,zory巨神在考场上找规律AC,自己都不会证..我证明了一下(然而这货还是不认可自己的做法) 按照分割点的思路,我们 ...

  2. 国内物联网平台初探(六) ——庆科云FogCloud

    平台定位 FogCloud 快速接入智能硬件 FogCloud为开发者提供便捷的智能硬件接入服务,真正实现敏捷开发,快速迭代. FogCloud提供功能强大的云端服务 包括 产品/APP管理 ,消息通 ...

  3. hdoj--1281--棋盘游戏(最小点覆盖+枚举)

    棋盘游戏 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  4. firewalld使用

    1.firewalld的基本使用 启动: systemctl start firewalld 关闭: systemctl stop firewalld 查看状态: systemctl status f ...

  5. 如何用SVG写一个环形进度条以及动画

    本次案例主要使用了svg的三个元素,分别为circle.text.path,关于svg的介绍大家可以看MDN上的相关教程,传送门 由于svg可以写到HTML中,所以这里我们就可以很方便的做进度条加载动 ...

  6. Npgsql使用入门(一)【搭建环境】

    首先去官网下载最新数据库安装包 postgresql-9.6.1-1-windows-x64 将postgreSQL9.6注册为windows服务 注意:大小写要正确 D:\Worksoftware\ ...

  7. DB2大数据量优化查询解决方案

    利用DB2表分区的功能对大数据量的表进行分区,可以优化查询. 表分区介绍: 表分区是一种数据组织方案,它根据一列或多列中的值把表数据划分为多个称为数据分区 的存储对象. (我觉得表分区就类似于Wind ...

  8. layui新手使用

    1,首先最重要的是引入官方的layui.js  layui.css文件 2,在自己的项目中新建一个目录 再在该目录下建一个js文件,js中写入 layui.define(['layer', 'form ...

  9. C# 学习笔记1 _ 学习要点

    程序开始 MainConsole.WriteLine(“换行”);Console.Write(“不换行”);Console.ReadKey();   等待用户从键盘上键入一个键.Console.Cle ...

  10. 继承&封装

    扩展一个已有的类,并且继承该类的属性和行为这种方式成为继承. 实例 public class Polygon { public int sides; public double area; publi ...