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 正则表达式实现计算器功能
Apr 29 Python
Python3多线程爬虫实例讲解代码
Jan 05 Python
python实现用户管理系统
Jan 10 Python
matplotlib 输出保存指定尺寸的图片方法
May 24 Python
python3结合openpyxl库实现excel操作的实例代码
Sep 11 Python
python高效过滤出文件夹下指定文件名结尾的文件实例
Oct 21 Python
Python实现简单查找最长子串功能示例
Feb 26 Python
Python3.5文件读与写操作经典实例详解
May 01 Python
Jacobi迭代算法的Python实现详解
Jun 29 Python
python Django的web开发实例(入门)
Jul 31 Python
利用Matlab绘制各类特殊图形的实例代码
Jul 16 Python
用Python生成会跳舞的美女
Jan 18 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 多线程上下文中安全写文件实现代码
2009/12/28 PHP
巧用php中的array_filter()函数去掉多维空值的代码分享
2012/09/07 PHP
实现PHP多线程异步请求的3种方法
2014/01/17 PHP
ThinkPHP Mobile使用方法简明教程
2014/06/18 PHP
PHP中构造函数和析构函数解析
2014/10/10 PHP
Ajax中的JSON格式与php传输过程全面解析
2017/11/14 PHP
event.srcElement 用法笔记e.target
2009/12/18 Javascript
ExtJs扩展之GroupPropertyGrid代码
2010/03/05 Javascript
ASP.NET jQuery 实例3 (在TextBox里面阻止复制、剪切和粘贴事件)
2012/01/13 Javascript
浏览器图片选择预览、旋转、批量上传的JS代码实现
2013/12/04 Javascript
Extjs表单常见验证小结
2014/03/07 Javascript
跟我学Nodejs(三)--- Node.js模块
2014/05/25 NodeJs
JavaScript实现同步于本地时间的动态时间显示方法
2015/02/02 Javascript
跟我学习JScript的Bug与内存管理
2015/11/18 Javascript
node.js缺少mysql模块运行报错的解决方法
2016/11/13 Javascript
原生js实现新闻列表展开/收起全文功能
2017/01/20 Javascript
了解VUE的render函数的使用
2017/06/08 Javascript
JavaScript实现的搜索及高亮显示功能示例
2017/08/14 Javascript
vue项目如何刷新当前页面的方法
2018/05/18 Javascript
iphone刘海屏页面适配方法
2019/05/07 Javascript
jquery实现动态改变css样式的方法分析
2019/05/27 jQuery
Cpy和Python的效率对比
2015/03/20 Python
Python导入txt数据到mysql的方法
2015/04/08 Python
python中类和实例如何绑定属性与方法示例详解
2017/08/18 Python
使用python实现unix2dos和dos2unix命令的例子
2019/08/13 Python
英国最大的经认证的有机超市:Planet Organic
2018/02/02 全球购物
香蕉共和国工厂店:Banana Republic Factory
2018/06/09 全球购物
嘻哈珠宝品牌:KRKC&CO
2020/10/19 全球购物
校园奶茶店创业计划书
2014/01/23 职场文书
护士岗前培训自我评鉴
2014/02/28 职场文书
新闻编辑求职信
2014/04/09 职场文书
乱丢垃圾袋检讨书
2014/10/08 职场文书
标准离婚协议书范文下载
2014/11/30 职场文书
向女朋友道歉的话
2015/01/20 职场文书
质检员岗位职责范本
2015/04/07 职场文书
交通安全学习心得体会
2016/01/18 职场文书