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 dict remove数组删除(del,pop)
Mar 24 Python
在Python中用split()方法分割字符串的使用介绍
May 20 Python
python检查字符串是否是正确ISBN的方法
Jul 11 Python
Python标准库之collections包的使用教程
Apr 27 Python
Python 读写文件的操作代码
Sep 20 Python
Python字符串的全排列算法实例详解
Jan 07 Python
Python实现查找数组中任意第k大的数字算法示例
Jan 23 Python
手机使用python操作图片文件(pydroid3)过程详解
Sep 25 Python
Python Pillow.Image 图像保存和参数选择方式
Jan 09 Python
django xadmin中form_layout添加字段显示方式
Mar 30 Python
python thrift 实现 单端口多服务的过程
Jun 08 Python
python 下划线的不同用法
Oct 24 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学习 计数器实例代码
2008/06/15 PHP
php中debug_backtrace、debug_print_backtrace和匿名函数用法实例
2014/12/01 PHP
PHP 二维数组和三维数组的过滤
2016/03/16 PHP
PHP 表单提交及处理表单数据详解及实例
2016/12/27 PHP
PHP基于SimpleXML生成和解析xml的方法示例
2017/07/17 PHP
JS request函数 用来获取url参数
2010/05/17 Javascript
很好用的js日历算法详细代码
2013/03/07 Javascript
JQuery页面的表格数据的增加与分页的实现
2013/12/10 Javascript
jquery实现点击文字可编辑并修改保存至数据库
2014/04/15 Javascript
javascript html5摇一摇功能的实现
2016/04/19 Javascript
动态加载js、css的实例代码
2016/05/26 Javascript
JS对象的深度克隆方法示例
2017/03/16 Javascript
bootstrap精简教程_动力节点Java学院整理
2017/07/14 Javascript
vue2+el-menu实现路由跳转及当前项的设置方法实例
2017/11/07 Javascript
解决vue单页面应用中动态修改title问题
2019/06/09 Javascript
vue自定义指令实现仅支持输入数字和浮点型的示例
2019/10/30 Javascript
React实现阿里云OSS上传文件的示例
2020/08/10 Javascript
原生js实现拖拽移动与缩放效果
2020/08/24 Javascript
解决vue scoped scss 无效的问题
2020/09/04 Javascript
微信小程序自定义yPicker组件实现省市区三级联动功能
2020/10/29 Javascript
Python3遍历目录树实现方法
2015/05/22 Python
快速入门python学习笔记
2017/12/06 Python
Python3计算三角形的面积代码
2017/12/18 Python
python实现对图片进行旋转,放缩,裁剪的功能
2019/08/07 Python
.NET程序员的几道面试题
2012/06/01 面试题
国际贸易专业推荐信
2013/11/15 职场文书
中医临床专业自我鉴定范文
2014/01/15 职场文书
应届毕业生个人求职信范文
2014/01/29 职场文书
人力资源主管的岗位职责
2014/03/15 职场文书
《彩色世界》教学反思
2014/04/12 职场文书
竞选劳动委员演讲稿
2014/04/28 职场文书
软件售后服务承诺书
2014/05/21 职场文书
周一问候语大全
2015/11/10 职场文书
《穷人》教学反思
2016/02/19 职场文书
如何用Laravel包含你自己的帮助函数
2021/05/27 PHP
分享MySQL常用 内核 Debug 几种常见方法
2022/03/17 MySQL