Python实现的多进程和多线程功能示例


Posted in Python onMay 29, 2018

本文实例讲述了Python实现的多进程和多线程功能。分享给大家供大家参考,具体如下:

听了朋友说起,他们目前开发的测试框架,用python实现的分布式系统。虽然python的执行效率没有c和c++那么高,但是依靠集群的力量,产生的压力很是牛逼啊。

了解了下大概的方式就是

1、有台主控机,负责调度,比如执行的参数等

2、有n多台执行机,每个执行机上部署一个python的xmlRPC server,主控机调用rpccall,然后执行机执行。rpccall里面会fork一些进程,每个进程再创建一些线程,去调用测试方法。这样,扩展性就很好了。

对于python的rpc call,之前也没有接触过,不是很了解,google了一下,发现很简单,拿了个网上的例子,如下,先部署一个rpcServer

from SimpleXMLRPCServer import SimpleXMLRPCServer
def add(a , b): 
  return a+bserver = SimpleXMLRPCServer(("10.249.192.38", 8000))#这里不要用localhost,否则只有本机才能访问
server.register_function(add)
server.serve_forever()

客户端:

from xmlrpclib import Server
Proxyserver = ServerProxy("http://localhost:8000")
try: ret = server.add(30,90) print 'result:', ret print 'result type:', type(ret)
except
 Exception, e: print "exception",e

其实还是很简单的。

然后再看了下python的多进程和多线程的方法,写了个例子,如下:

#encoding=utf-8
import sys
import os
import time
import pdb
import httplib
import thread
import threading
constant_p = 0 #创建全局变量,进程数
constant_s = 0 #创建全局变量,线程数
mutex_g = threading.RLock() #创建全局锁
def run(count):#该函数创建3个线程,同时调用3个不同的函数
  a = 1
  b = 0
  thread.start_new_thread(test0,(a,b))#这里传入的参数需要以元组的形式,跟void指针其实也差不多
  thread.start_new_thread(test1,(a,b))
  thread.start_new_thread(test2,(a,b))
def test0(a,b):
  global mutex_g
  global constant_s
  threadid = thread.get_ident()
  mutex_g.acquire()#这里需要把线程数说锁起来,否则结果会被修改
  constant_s = constant_s+1
  mutex_g.release()
  print "thread 0 called,and the threadid is:%d"%(threadid)
  sys.exit(0)
def test1(a,b):
  global mutex_g
  global constant_s
  threadid = thread.get_ident()
  mutex_g.acquire()
  constant_s = constant_s+1
  mutex_g.release()
  print "thread 1 called,and the threadid is:%d"%(threadid)
  sys.exit(0)
def test2(a,b):
  global mutex_g
  global constant_s
  threadid = thread.get_ident()
  mutex_g.acquire()
  constant_s = constant_s+1
  mutex_g.release()
  print "thread 2 called,and the threadid is:%d"%(threadid)
  sys.exit(0)
def my_fork():
  global constant_p
  pid = os.fork()#fork一个子进程,子进程的pid=0同时2个进程会执行my_fork()函数
  if (pid == 0):#子进程执行到这个if里面
    constant_p = constant_s + 1
    run(3)
    time.sleep(5)
    print "total thread is %d"%constant_s#这个结果是3,因为子进程创建按了3个线程
  elif (pid >0):#父进程执行到这个if里面
    constant_p = constant_s + 1 run(4)
    time.sleep(5)
    print "total thread is %d"%constant_s#这个结果也是3,因为该进程也创建了3个线程
  else:
    print "fork error"
    sys.exit(0)
  print "total process is %d"%constant_p#该结果是1,因为2个进程只执行了一次
  constant_p = constant_s + 1
  sys.exit(0)
if __name__ == "__main__":
  my_fork()
  #my_fork()
  #my_fork()

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
详解Python中的from..import绝对导入语句
Jun 21 Python
利用Python破解验证码实例详解
Dec 08 Python
python中利用xml.dom模块解析xml的方法教程
May 24 Python
Python中字典和集合学习小结
Jul 07 Python
Python学习笔记之if语句的使用示例
Oct 23 Python
Windows环境下python环境安装使用图文教程
Mar 13 Python
Python图像处理之图像的读取、显示与保存操作【测试可用】
Jan 04 Python
python实现DEM数据的阴影生成的方法
Jul 23 Python
pytorch 修改预训练model实例
Jan 18 Python
python topk()函数求最大和最小值实例
Apr 02 Python
jupyter notebook 写代码自动补全的实现
Nov 02 Python
Python Http请求json解析库用法解析
Nov 28 Python
Python实现的redis分布式锁功能示例
May 29 #Python
Python计算一个给定时间点前一个月和后一个月第一天的方法
May 29 #Python
PyTorch CNN实战之MNIST手写数字识别示例
May 29 #Python
Python根据指定日期计算后n天,前n天是哪一天的方法
May 29 #Python
python 将md5转为16字节的方法
May 29 #Python
python 利用栈和队列模拟递归的过程
May 29 #Python
查看django执行的sql语句及消耗时间的两种方法
May 29 #Python
You might like
深入PHP curl参数的详解
2013/06/17 PHP
php中JSON的使用方法
2015/04/30 PHP
js查错流程归纳
2012/05/04 Javascript
JavaScript建立一个语法高亮输入框实现思路
2013/02/26 Javascript
JQuery基础语法小结
2015/02/27 Javascript
实例详解ECMAScript5中新增的Array方法
2016/04/05 Javascript
Javascript获取background属性中url的值
2016/10/17 Javascript
微信小程序 网络API 上传、下载详解
2016/11/09 Javascript
JS设置时间无效问题的解决办法
2017/02/18 Javascript
canvas绘制多边形
2017/02/24 Javascript
jQuery简单绑定单个事件的方法示例
2017/06/10 jQuery
JS点击图片弹出文件选择框并覆盖原图功能的实现代码
2017/08/25 Javascript
cordova入门基础教程及使用中遇到的一些问题总结
2017/11/14 Javascript
JavaScript数据结构与算法之队列原理与用法实例详解
2017/11/22 Javascript
基于vue2.0的活动倒计时组件countdown(附源码下载)
2018/10/09 Javascript
Vue的属性、方法、生命周期实例代码详解
2019/09/17 Javascript
基于scrapy实现的简单蜘蛛采集程序
2015/04/17 Python
python图像处理之反色实现方法
2015/05/30 Python
微信跳一跳python辅助脚本(总结)
2018/01/11 Python
python实现俄罗斯方块
2018/06/26 Python
[原创]Python入门教程5. 字典基本操作【定义、运算、常用函数】
2018/11/01 Python
Pandas将列表(List)转换为数据框(Dataframe)
2020/04/24 Python
基于Python第三方插件实现西游记章节标注汉语拼音的方法
2020/05/22 Python
python 写一个文件分发小程序
2020/12/05 Python
用python批量下载apk
2020/12/29 Python
css3动画效果抖动解决方法
2018/09/03 HTML / CSS
图解CSS3制作圆环形进度条的实例教程
2016/05/26 HTML / CSS
社会实践心得体会
2014/01/03 职场文书
12.4法制宣传日活动总结
2014/08/26 职场文书
房产协议书范本
2014/10/18 职场文书
收银员岗位职责范本
2015/04/07 职场文书
学校会议通知范文
2015/04/15 职场文书
教师节表彰会主持词
2015/07/06 职场文书
2016党员干部廉洁自律心得体会
2016/01/13 职场文书
Django实现聊天机器人
2021/05/31 Python
MySQL聚簇索引和非聚簇索引的区别详情
2022/06/14 MySQL