- 主题:[update]subprocess并行
for i in range(5):
p = subprocess.Popen(args=cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
close_fds=True)
p.communicate()
cmd是一个写文件的操作。
我本来想同时写5个文件,但是看实际的运行,
只是一个接一个文件写,没有同时写5个文件。
为什么没有同时起5个进程呢?
谢谢
________________________________________
去掉p.communicate()可以多个CPU并行运行了
_________________________________________
有一个新问题,cmd里的输出在多线程里面怎么
收到啊,特别是stderr。stdout是可以正常收到,
但是stderr没搞定
--
修改:BrendanEich FROM 58.246.75.*
FROM 180.169.235.*
from multiprocessing.pool import Pool
这个模块或许才是你需要的。
而且你这段代码有点问题:
p.communicate() 是阻塞的。所以循环实际只运行了一次。
就算不是阻塞的。因为 p 这个变量每次循环都会重新赋值,旧的 Popen 被销毁,新的 Popen 被创建,永远也只有一个值存在。
【 在 BrendanEich (gone with the wind) 的大作中提到: 】
: for i in range(5):
: p = subprocess.Popen(args=cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
: close_fds=True)
: ...................
--
FROM 124.72.118.*
多谢
【 在 hgoldfish 的大作中提到: 】
: from multiprocessing.pool import Pool
: 这个模块或许才是你需要的。
: 而且你这段代码有点问题:
: ...................
--
FROM 223.104.210.*
嗯嗯
【 在 ToSimplicity 的大作中提到: 】
: Popen.communicate(input=None, timeout=None)
: Interact with process: Send data to stdin. Read data from stdout and stderr, until end-of-file is reached. Wait for process to terminate and set the returncode attribute.
--
FROM 223.104.210.*
多个线程python因为GIL是不是效率不高啊
【 在 ToSimplicity 的大作中提到: 】
: 如果是有许多要并发写的东西,可以生成一个进程,里面放多个线程来写,没有必要起那么多进程,浪费资源。
: 或者用异步处理,显得b格比较高。。。
--
修改:BrendanEich FROM 101.86.76.*
FROM 101.86.76.*
是有 GIL 没错,但是一般认为只对 CPU 密集型的操作有影响,IO 的没事。
何况上面说的是让你开一个进程来专门负责写文件,计算还是可以放在另一个进程里的。
【 在 BrendanEich (gone with the wind) 的大作中提到: 】
: 多个线程python因为GIL是不是效率不高啊
--
FROM 114.242.94.*
嗯嗯
我的程序主要是仿真
还是cpu运算很多
只是最后写文件导出结果
谢谢啦
【 在 wincss 的大作中提到: 】
: 是有 GIL 没错,但是一般认为只对 CPU 密集型的操作有影响,IO 的没事。
: 何况上面说的是让你开一个进程来专门负责写文件,计算还是可以放在另一个进程里的。
:
--
FROM 58.246.75.*
试过了
p.communicate()
去掉了就OK了
【 在 hgoldfish 的大作中提到: 】
: from multiprocessing.pool import Pool
: 这个模块或许才是你需要的。
: 而且你这段代码有点问题:
: ...................
--
FROM 58.246.75.*