python进程join会让程序线性执行_python 多进程没有并发执行是怎么回事?
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 多进程没有并发执行是怎么回事?相关推荐
- python进程join的用法_python 进程介绍 进程简单使用 join 验证空间隔离
一.多道程序设计技术(详情参考:https://www.cnblogs.com/clschao/articles/9613464.html) 所谓多道程序设计技术,就是指允许多个程序同时进入内存并运行 ...
- python多线程执行_python多线程实现同时执行两个while循环
如果想同时执行两个while True循环,可以使用多线程threading来实现. 完整代码 #coding=gbk from time import sleep, ctime import thr ...
- python每天定时9点执行_python 定时器每天就执行一次的实现代码
1.实现功能 编写python脚本一直运行,判断当下是否是新的一天,如果是就执行一次任务代码 2.具体实现代码 #-*-coding:utf-8 -*- __author__ = 'Administr ...
- python软件和rost软件哪个更好_Python几种并发实现方案的性能比较
偶然看到Erlang vs. Stackless python: a first benchmark,对Erlang和Stackless Python的并发处理性能进行了实验比较,基本结论认为二者有比 ...
- python程序设计实验报告实验程序流程序列化_Python程序设计_教学大纲_段震.doc
<Python程序设计>教学大纲 安徽大学 计算机科学与技术 学院 2015 年 10 月课程性质与设置目的要求(前言)<Python程序设计>课程是计算机科学与技术学院各专业 ...
- python自动化接口测试excel用例串行之行_python 读取 Excel 自动化执行测试用例
python 读取 Excel 自动化执行测试用例 Excel 测试用例的读取 安装 python 操作Excel 的库 pip install xlrd/xlwt/xlutils (安装三个操作库) ...
- python文本字符分析编写程序接收字符串_Python程序接受包含所有元音的字符串
有时您希望根据某些条件接受输入.在这里,我们将看到相同类型的程序.我们将编写一个仅允许带有元音的单词的程序.我们将向他们展示输入是否有效. 让我们一步一步地看看方法.定义元音列表[A,E,I,O,U, ...
- python程序设计实验报告实验程序流程序列化_Python使用pickle模块实现序列化功能示例...
本文实例讲述了Python使用pickle模块实现序列化功能.分享给大家供大家参考,具体如下: Python内置的pickle模块能够将Python对象序列成字节流,也可以把字节流反序列成对象. im ...
- python爬取微信小程序(实战篇)_python爬取猫眼的前100榜单并展示在微信小程序
首先分析要爬取的网页,对其结构及数据获取方式解析后,可采用正则筛选自己要的数据 猫眼榜单.png import requests from requests.exceptions import Req ...
- python数据库操作批量sql执行_Python批量修改数据库执行Sql文件
{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...
最新文章
- 【php增删改查实例】第十七节 - 用户登录(1)
- 富文本框让最大四百像素_TinyMCE 富文本编辑器 ━━ 基本配置
- CVPR 2010 MOSSE:《Visual Object Tracking using Adaptive Correlation Filters.》论文笔记
- CSS的特性之层叠性介绍
- Winddows 10 安装 COCO API(pycocotools)
- 编程中的那些容易迷糊的小知识
- 市民卡怎么登录显示服务器繁忙,2分钟办理一笔业务 杭州网记者体验最具人气的“市民卡”窗口服务...
- 单片机初始化WIFI模块
- autofs后 卸载_nfs挂载无法卸载
- 每日一课 | 数据分析的本质是什么?
- 究竟是谁,害了骑手小哥?
- 1. 计算机网络概述
- R语言金融分析作业(一)
- 边界Fisher分析(MFA)及其非线性改进核边界Fisher分析(KMFA)的验证对比
- 28行python代码实现哈工大一键申请出校41天
- C语言判断中英文输入
- 用JS向HTML文本框输入,淘汰赛JS - 双向绑定多个输入(硬编码的HTML输入文本框),并得到JSON阵列...
- 币圈投资比人生风险还大吗?
- 计算机中文字转换为表格怎么弄,word中如何把文字转换为表格,文字转换表格的方法...
- pytorch学习率下降策略
热门文章
- 心理平衡其实就这么简单
- String s = new String(“abc“)创建了几个对象
- RESTful API 设计规范
- python之featVec[:axis]|extend|append
- Bootstrap排版——HTML元素的样式重定义
- Codewar python训练题全记录——持续更新
- Eclipse修改XML默认打开方式
- 有人很好奇我博客文章的默认展图是怎么弄的?
- 【Cocos2d-Js基础教学(2)类的使用和面向对象】
- Vsftp的PASV模式和Port模式及VsFTP配置方案