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异常处理慎用“except:pass”建议
Apr 02 Python
详解Python2.x中对Unicode编码的使用
Apr 03 Python
itchat和matplotlib的结合使用爬取微信信息的实例
Aug 25 Python
Python类的继承和多态代码详解
Dec 27 Python
Python切片工具pillow用法示例
Mar 30 Python
Python实现的简单线性回归算法实例分析
Dec 26 Python
Pytorch Tensor的索引与切片例子
Aug 18 Python
python中字典按键或键值排序的实现代码
Aug 27 Python
Python 求数组局部最大值的实例
Nov 26 Python
在keras里实现自定义上采样层
Jun 28 Python
python 实现客户端与服务端的通信
Dec 23 Python
python基于selenium爬取斗鱼弹幕
Feb 20 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
笑谈配置,使用Smarty技术
2007/01/04 PHP
php 判断是否是中文/英文/数字示例代码
2013/09/30 PHP
php检查字符串中是否包含7位GSM字符的方法
2015/03/17 PHP
php实现判断访问来路是否为搜索引擎机器人的方法
2015/04/15 PHP
Laravel框架文件上传功能实现方法示例
2019/04/16 PHP
php swoole多进程/多线程用法示例【基于php7nts版】
2019/08/12 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
2020/04/02 PHP
在网页中屏蔽快捷键
2006/09/06 Javascript
js类定义函数时用prototype与不用的区别示例介绍
2014/06/10 Javascript
js 数组去重的四种实用方法
2014/09/09 Javascript
JavaScript设计模式之外观模式介绍
2014/12/28 Javascript
C++中的string类的用法小结
2015/08/07 Javascript
JavaScript实现的经典文件树菜单效果
2015/09/08 Javascript
JS实现的倒计时效果实例(2则实例)
2015/12/23 Javascript
jQuery获取父元素节点、子元素节点及兄弟元素节点的方法
2016/04/14 Javascript
jQuery height()、innerHeight()、outerHeight()函数的区别详解
2016/05/23 Javascript
Vue.js基础指令实例讲解(各种数据绑定、表单渲染大总结)
2017/07/03 Javascript
jQuery实现拼图小游戏(实例讲解)
2017/07/24 jQuery
JavaScript同源策略和跨域访问实例详解
2018/04/03 Javascript
vue封装swiper代码实例解析
2019/10/08 Javascript
[01:03:54]Liquid vs IG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python if语句知识点用法总结
2018/06/10 Python
python解析json串与正则匹配对比方法
2018/12/20 Python
Python设计模式之组合模式原理与用法实例分析
2019/01/11 Python
Python字典循环添加一键多值的用法实例
2019/01/20 Python
django 实现将本地图片存入数据库,并能显示在web上的示例
2019/08/07 Python
将tensorflow模型打包成PB文件及PB文件读取方式
2020/01/23 Python
校运会入场式解说词
2014/02/10 职场文书
土建专业大学生自荐信范文
2014/04/09 职场文书
2015年人事工作总结范文
2015/04/09 职场文书
幼儿园保育员随笔
2015/08/14 职场文书
五星级酒店宣传口号
2015/12/25 职场文书
python 如何用terminal输入参数
2021/05/25 Python
Vue鼠标滚轮滚动切换路由效果的实现方法
2021/08/04 Vue.js
千万级用户系统SQL调优实战分享
2022/03/03 MySQL
win10电脑老是死机怎么办?win10系统老是死机的解决方法
2022/08/05 数码科技