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中列表元素连接方法join用法实例
Apr 07 Python
Python实现的下载网页源码功能示例
Jun 13 Python
django文档学习之applications使用详解
Jan 29 Python
解决Spyder中图片显示太小的问题
Apr 27 Python
如何实现删除numpy.array中的行或列
May 08 Python
详解python while 函数及while和for的区别
Sep 07 Python
Python多进程fork()函数详解
Feb 22 Python
Python turtle绘画象棋棋盘
Aug 21 Python
scrapy数据存储在mysql数据库的两种方式(同步和异步)
Feb 18 Python
关于python中的xpath解析定位
Mar 06 Python
对python中return与yield的区别详解
Mar 12 Python
Anaconda配置pytorch-gpu虚拟环境的图文教程
Apr 16 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
Protoss兵种对照表
2020/03/14 星际争霸
PHP中的CMS的涵义
2007/03/11 PHP
php中的strpos使用示例
2014/02/27 PHP
Laravel 5框架学习之模型、控制器、视图基础流程
2015/04/08 PHP
PHP简单实现DES加密解密的方法
2016/07/12 PHP
PHP+redis实现的悲观锁机制示例
2018/06/12 PHP
PHP lcfirst()函数定义与用法
2019/03/08 PHP
Javascript & DHTML 实例编程(教程)(三)初级实例篇1—上传文件控件实例
2007/06/02 Javascript
js判断字符长度及中英文数字等
2014/03/19 Javascript
js的[defer]和[async]属性
2014/11/24 Javascript
JavaScript中的闭包(Closure)详细介绍
2014/12/30 Javascript
JavaScript 学习笔记之操作符(续)
2015/01/14 Javascript
JS实现为表格动态添加标题的方法
2015/03/31 Javascript
JavaScript事件学习小结(一)事件流
2016/06/09 Javascript
通过jquery实现页面的动画效果(实例代码)
2016/09/18 Javascript
JQuery手速测试小游戏实现思路详解
2016/09/20 Javascript
jstree的简单实例
2016/12/01 Javascript
JavaScript实现短暂提示框功能
2018/04/04 Javascript
详解jQuery中的easyui
2018/09/02 jQuery
JavaScript数据结构与算法之二叉树实现查找最小值、最大值、给定值算法示例
2019/03/01 Javascript
javascript网页随机点名实现过程解析
2019/10/15 Javascript
JavaScript命令模式原理与用法实例详解
2020/03/10 Javascript
django定期执行任务(实例讲解)
2017/11/03 Python
解决Django的request.POST获取不到内容的问题
2018/05/28 Python
keras输出预测值和真实值方式
2020/06/27 Python
推荐值得学习的12款python-web开发框架
2020/08/10 Python
HTML5 video进入全屏和退出全屏的实现方法
2020/07/28 HTML / CSS
Java Servlet的主要功能和作用是什么
2014/02/14 面试题
个人求职简历中英文自我评价
2013/12/16 职场文书
《泉水》教学反思
2014/04/11 职场文书
学校四风问题对照检查材料思想汇报
2014/09/26 职场文书
民主生活会发言材料
2014/10/20 职场文书
委托证明范本
2014/11/25 职场文书
大学生考试作弊被抓检讨书
2014/12/27 职场文书
position:sticky 粘性定位的几种巧妙应用详解
2021/04/24 HTML / CSS
python3.7.2 tkinter entry框限定输入数字的操作
2021/05/22 Python