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 strip()函数 介绍
May 24 Python
解决出现Incorrect integer value: '' for column 'id' at row 1的问题
Oct 29 Python
Python列表生成式与生成器操作示例
Aug 01 Python
解决python中用matplotlib画多幅图时出现图形部分重叠的问题
Jul 07 Python
Python实现非正太分布的异常值检测方式
Dec 09 Python
Django REST framwork的权限验证实例
Apr 02 Python
Python opencv相机标定实现原理及步骤详解
Apr 09 Python
Python使用urlretrieve实现直接远程下载图片的示例代码
Aug 17 Python
python 获取字典特定值对应的键的实现
Sep 29 Python
selenium携带cookies模拟登陆CSDN的实现
Jan 19 Python
5分钟快速掌握Python定时任务框架的实现
Jan 26 Python
Pytorch可视化的几种实现方法
Jun 10 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 smarty模版引擎中变量操作符及使用方法
2009/12/11 PHP
php操作SVN版本服务器类代码
2011/11/27 PHP
PHP中SESSION使用中的一点经验总结
2012/03/30 PHP
PHP输出XML到页面的3种方法详解
2013/06/06 PHP
ThinkPHP5+Layui实现图片上传加预览功能
2018/08/17 PHP
PHP 模拟登陆功能实例详解
2019/09/10 PHP
通过Mootools 1.2来操纵HTML DOM元素
2009/09/15 Javascript
JS获取当前网址、主机地址项目根路径
2013/11/19 Javascript
javascript跨域的4种方法和原理详解
2014/04/08 Javascript
javascript解析json实例详解
2014/11/05 Javascript
jQuery插件HighCharts绘制2D圆环图效果示例【附demo源码下载】
2017/03/09 Javascript
Node.js对MongoDB数据库实现模糊查询的方法
2017/05/03 Javascript
JavaScript基础之this详解
2017/06/04 Javascript
利用SpringMVC过滤器解决vue跨域请求的问题
2018/02/10 Javascript
JavaScript循环遍历你会用哪些之小结篇
2018/09/28 Javascript
jQuery实现弹幕特效
2019/11/29 jQuery
一篇文章带你搞懂Vue虚拟Dom与diff算法
2020/08/25 Javascript
[03:04]2018年度DOTA2玩家最喜爱的主播-完美盛典
2018/12/16 DOTA
详解Python多线程Selenium跨浏览器测试
2017/04/01 Python
Python 获取div标签中的文字实例
2018/12/20 Python
如何通过python画loss曲线的方法
2019/06/26 Python
Pytorch 扩展Tensor维度、压缩Tensor维度的方法
2020/09/09 Python
CSS伪类与CSS伪元素的区别及由来具体说明
2012/12/07 HTML / CSS
全球领先的鞋类零售商:The Walking Company
2016/07/21 全球购物
美国羊皮公司:Overland
2018/01/15 全球购物
吉列剃须刀美国官网:Gillette美国
2018/07/13 全球购物
药学专业个人的自我评价
2013/12/31 职场文书
村长贪污检举信
2014/04/04 职场文书
关于工作时间玩手机的检讨书
2014/09/18 职场文书
会议接待欢迎词范文
2015/01/26 职场文书
公司员工违纪检讨书
2015/05/05 职场文书
教师节老师寄语
2015/05/28 职场文书
漂亮妈妈观后感
2015/06/08 职场文书
升学宴学生致辞
2015/07/27 职场文书
导游词之无锡古运河
2019/11/14 职场文书
Mysql如何查看是否使用到索引
2022/12/24 MySQL