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实现在windows服务中新建进程的方法
Jun 30 Python
python logging 日志轮转文件不删除问题的解决方法
Aug 02 Python
pyqt5的QWebEngineView 使用模板的方法
Aug 18 Python
python中的列表与元组的使用
Aug 08 Python
python基于celery实现异步任务周期任务定时任务
Dec 30 Python
Python有参函数使用代码实例
Jan 06 Python
使用Python爬虫库requests发送表单数据和JSON数据
Jan 25 Python
python 轮询执行某函数的2种方式
May 03 Python
ubuntu16.04升级Python3.5到Python3.7的方法步骤
Aug 20 Python
使用scrapy ImagesPipeline爬取图片资源的示例代码
Sep 28 Python
Python requests HTTP验证登录实现流程
Nov 05 Python
Python字典的基础操作
Nov 01 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.ini中的php-5.2.0配置指令详解
2008/03/27 PHP
Look And Say 序列php实现代码
2011/05/22 PHP
php读取excel文件示例分享(更新修改excel)
2014/02/27 PHP
PHP实现图片压缩的两则实例
2014/07/19 PHP
Yii实现自动加载类地图的方法
2015/04/01 PHP
php源码分析之DZX1.5随机数函数random用法
2015/06/17 PHP
Laravel Memcached缓存驱动的配置与应用方法分析
2016/10/08 PHP
php扩展开发入门demo示例
2019/09/23 PHP
File, FileReader 和 Ajax 文件上传实例分析(php)
2011/04/27 Javascript
JAVASCRIPT车架号识别/验证函数代码 汽车车架号验证程序
2012/01/08 Javascript
多次注册事件会导致一个事件被触发多次的解决方法
2013/08/12 Javascript
jquery固定底网站底部菜单效果
2013/08/13 Javascript
JavaScript设计模式之原型模式(Object.create与prototype)介绍
2014/12/28 Javascript
jquery使用each方法遍历json格式数据实例
2015/05/18 Javascript
js停止冒泡和阻止浏览器默认行为的简单方法
2016/05/15 Javascript
js实现表单及时验证功能 用户信息立即验证
2016/09/13 Javascript
jquery Easyui Datagrid实现批量操作(编辑,删除,添加)
2017/02/20 Javascript
vue利用better-scroll实现轮播图与页面滚动详解
2017/10/20 Javascript
微信小程序选择图片和放大预览图片功能
2017/11/02 Javascript
javascript代码优化的8点总结
2018/01/29 Javascript
详解Jest结合Vue-test-utils使用的初步实践
2019/06/27 Javascript
js实现计时器秒表功能
2019/12/16 Javascript
jquery实现图片放大镜效果
2020/12/23 jQuery
Python中的urllib模块使用详解
2015/07/07 Python
Python 类的继承实例详解
2017/03/25 Python
对pandas里的loc并列条件索引的实例讲解
2018/11/15 Python
Windows 8.1 64bit下搭建 Scrapy 0.22 环境
2018/11/18 Python
对Python正则匹配IP、Url、Mail的方法详解
2018/12/25 Python
django将网络中的图片,保存成model中的ImageField的实例
2019/08/07 Python
详解Anaconda 的安装教程
2020/09/23 Python
使用django自带的user做外键的方法
2020/11/30 Python
HTML5所有标签汇总及标签意义解释
2015/03/12 HTML / CSS
乡镇爱国卫生月活动总结
2014/06/25 职场文书
2014县政府领导班子三严三实对照检查材料思想汇报
2014/09/26 职场文书
2014教师年度工作总结
2014/11/10 职场文书
2015年爱牙日活动总结
2015/03/23 职场文书