2018-11-21 回答

python提供了非常好用的多进程包multiprocessing,你只需要定义一个函数,python会替你完成其他所有事情。

借助这个包,可以轻松完成从单进程到并发执行的转换。

1、新建单一进程

如果我们新建少量进程,可以如下:

import multiprocessing

import time

def func(msg):

for i in xrange(3):

print msg

time.sleep(1)

if __name__ == "__main__":

p = multiprocessing.process(target=func, args=("hello", ))

p.start()

p.join()

print "sub-process done."12345678910111213

2、使用进程池

是的,你没有看错,不是线程池。它可以让你跑满多核cpu,而且使用方法非常简单。

注意要用apply_async,如果落下async,就变成阻塞版本了。

processes=4是最多并发进程数量。

import multiprocessing

import time

def func(msg):

for i in xrange(3):

print msg

time.sleep(1)

if __name__ == "__main__":

pool = multiprocessing.pool(processes=4)

for i in xrange(10):

msg = "hello %d" %(i)

pool.apply_async(func, (msg, ))

pool.close()

pool.join()

print "sub-process(es) done."12345678910111213141516

3、使用pool,并需要关注结果

更多的时候,我们不仅需要多进程执行,还需要关注每个进程的执行结果,如下:

import multiprocessing

import time

def func(msg):

for i in xrange(3):

print msg

time.sleep(1)

return "done " + msg

if __name__ == "__main__":

pool = multiprocessing.pool(processes=4)

result = []

for i in xrange(10):

msg = "hello %d" %(i)

result.append(pool.apply_async(func, (msg, )))

pool.close()

pool.join()

for res in result:

print res.get()

print "sub-process(es) done."1234567891011121314151617181920

2014.12.25更新

根据网友评论中的反馈,在windows下运行有可能崩溃(开启了一大堆新窗口、进程),可以通过如下调用来解决:

multiprocessing.freeze_support()1

附录(自己的脚本):

#!/usr/bin/python

import threading

import subprocess

import datetime

import multiprocessing

def dd_test(round, th):

test_file_arg = 'of=/zbkc/test_mds_crash/1m_%s_%s_{}' %(round, th)

command = "seq 100 | xargs -i dd if=/dev/zero %s bs=1m count=1" %test_file_arg

print command

subprocess.call(command,shell=true,stdout=open('/dev/null','w'),stderr=subprocess.stdout)

def mds_stat(round):

p = subprocess.popen("zbkc mds stat", shell = true, stdout = subprocess.pipe)

out = p.stdout.readlines()

if out[0].find('active') != -1:

command = "echo '0205pm %s round mds status ok, %s' >> /round_record" %(round, datetime.datetime.now())

command_2 = "time (ls /zbkc/test_mds_crash/) 2>>/round_record"

command_3 = "ls /zbkc/test_mds_crash | wc -l >> /round_record"

subprocess.call(command,shell=true)

subprocess.call(command_2,shell=true)

subprocess.call(command_3,shell=true)

return 1

else:

command = "echo '0205 %s round mds status abnormal, %s, %s' >> /round_record" %(round, out[0], datetime.datetime.now())

subprocess.call(command,shell=true)

return 0

#threads = []

for round in range(1, 1600):

pool = multiprocessing.pool(processes = 10) #使用进程池

for th in range(10):

# th_name = "thread-" + str(th)

# threads.append(th_name) #添加线程到线程列表

# threading.thread(target = dd_test, args = (round, th), name = th_name).start() #创建多线程任务

pool.apply_async(dd_test, (round, th))

pool.close()

pool.join()

#等待线程完成

# for t in threads:

# t.join()

if mds_stat(round) == 0:

subprocess.call("zbkc -s",shell=true)

break

python进程join会让程序线性执行_python 多进程没有并发执行是怎么回事?相关推荐

  1. python进程join的用法_python 进程介绍 进程简单使用 join 验证空间隔离

    一.多道程序设计技术(详情参考:https://www.cnblogs.com/clschao/articles/9613464.html) 所谓多道程序设计技术,就是指允许多个程序同时进入内存并运行 ...

  2. python多线程执行_python多线程实现同时执行两个while循环

    如果想同时执行两个while True循环,可以使用多线程threading来实现. 完整代码 #coding=gbk from time import sleep, ctime import thr ...

  3. python每天定时9点执行_python 定时器每天就执行一次的实现代码

    1.实现功能 编写python脚本一直运行,判断当下是否是新的一天,如果是就执行一次任务代码 2.具体实现代码 #-*-coding:utf-8 -*- __author__ = 'Administr ...

  4. python软件和rost软件哪个更好_Python几种并发实现方案的性能比较

    偶然看到Erlang vs. Stackless python: a first benchmark,对Erlang和Stackless Python的并发处理性能进行了实验比较,基本结论认为二者有比 ...

  5. python程序设计实验报告实验程序流程序列化_Python程序设计_教学大纲_段震.doc

    <Python程序设计>教学大纲 安徽大学 计算机科学与技术 学院 2015 年 10 月课程性质与设置目的要求(前言)<Python程序设计>课程是计算机科学与技术学院各专业 ...

  6. python自动化接口测试excel用例串行之行_python 读取 Excel 自动化执行测试用例

    python 读取 Excel 自动化执行测试用例 Excel 测试用例的读取 安装 python 操作Excel 的库 pip install xlrd/xlwt/xlutils (安装三个操作库) ...

  7. python文本字符分析编写程序接收字符串_Python程序接受包含所有元音的字符串

    有时您希望根据某些条件接受输入.在这里,我们将看到相同类型的程序.我们将编写一个仅允许带有元音的单词的程序.我们将向他们展示输入是否有效. 让我们一步一步地看看方法.定义元音列表[A,E,I,O,U, ...

  8. python程序设计实验报告实验程序流程序列化_Python使用pickle模块实现序列化功能示例...

    本文实例讲述了Python使用pickle模块实现序列化功能.分享给大家供大家参考,具体如下: Python内置的pickle模块能够将Python对象序列成字节流,也可以把字节流反序列成对象. im ...

  9. python爬取微信小程序(实战篇)_python爬取猫眼的前100榜单并展示在微信小程序

    首先分析要爬取的网页,对其结构及数据获取方式解析后,可采用正则筛选自己要的数据 猫眼榜单.png import requests from requests.exceptions import Req ...

  10. python数据库操作批量sql执行_Python批量修改数据库执行Sql文件

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

最新文章

  1. 【php增删改查实例】第十七节 - 用户登录(1)
  2. 富文本框让最大四百像素_TinyMCE 富文本编辑器 ━━ 基本配置
  3. CVPR 2010 MOSSE:《Visual Object Tracking using Adaptive Correlation Filters.》论文笔记
  4. CSS的特性之层叠性介绍
  5. Winddows 10 安装 COCO API(pycocotools)
  6. 编程中的那些容易迷糊的小知识
  7. 市民卡怎么登录显示服务器繁忙,2分钟办理一笔业务 杭州网记者体验最具人气的“市民卡”窗口服务...
  8. 单片机初始化WIFI模块
  9. autofs后 卸载_nfs挂载无法卸载
  10. 每日一课 | 数据分析的本质是什么?
  11. 究竟是谁,害了骑手小哥?
  12. 1. 计算机网络概述
  13. R语言金融分析作业(一)
  14. 边界Fisher分析(MFA)及其非线性改进核边界Fisher分析(KMFA)的验证对比
  15. 28行python代码实现哈工大一键申请出校41天
  16. C语言判断中英文输入
  17. 用JS向HTML文本框输入,淘汰赛JS - 双向绑定多个输入(硬编码的HTML输入文本框),并得到JSON阵列...
  18. 币圈投资比人生风险还大吗?
  19. 计算机中文字转换为表格怎么弄,word中如何把文字转换为表格,文字转换表格的方法...
  20. pytorch学习率下降策略

热门文章

  1. 心理平衡其实就这么简单
  2. String s = new String(“abc“)创建了几个对象
  3. RESTful API 设计规范
  4. python之featVec[:axis]|extend|append
  5. Bootstrap排版——HTML元素的样式重定义
  6. Codewar python训练题全记录——持续更新
  7. Eclipse修改XML默认打开方式
  8. 有人很好奇我博客文章的默认展图是怎么弄的?
  9. 【Cocos2d-Js基础教学(2)类的使用和面向对象】
  10. Vsftp的PASV模式和Port模式及VsFTP配置方案