作者gigayaya (gigayaya)
看板Python
标题[问题] subprocess可以当作subprocess的输入吗?
时间Thu Jul 19 11:54:11 2018
各位好,我在运用multiprocessing的时候遇到一个问题
程式架构如下:
main -----> subprocess(计算者)
|
|
|----> subprocess(产生资料者)
. .
. .
. .
-----> subprocess(产生资料者)
运作方式是,main会产生一个subprcess,这个prcoess会负责接收输入资料并计算然後
回传
然後main会产生很多个subprcoess负责产生资料,这几个负责产生资料後,将资料
喂给第一个计算者得到回传後return给main
我的做法是:
第一个解答者用p = Popen产生,并且用PIPE做输入输出的沟通
後面的用pool然後pool.apply_async将p作为args输入
这个做法会抛出一个错误:typeerror: can't pickle _thread.lock objects
google了一下好像是process这个物件不可序列化所以不能当作process的输入
因为计算者会用到比较多的资源不能每个产生资料者都配一个计算者,所以我当初才会
想用这个架构,藉由subprocess之间互相沟通来提升程式的效率
不知道要怎麽样才可以达到我的目的,希望各位前辈帮忙解惑,谢谢。
--
1F:嘘 mmmmO:靠 害我吓到想说啥时有po文07/26 01:40
2F:→ mmmmmO:嫩 我比你长一点07/26 01:42
3F:→ Ommmmm:靠北喔07/26 01:43
4F:→ mmmmmO:6907/26 01:51
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.231.21.240
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1531972455.A.B2B.html
5F:推 laputaflutin: 感觉你需要一个task queue来做非同步任务? 07/19 13:26
6F:→ laputaflutin: 可以搜寻celery试试看 07/19 13:27
抱歉,刚刚想到比较正确的说法,早上头昏昏的忘记了XD
我有一个Producer&Consumer的程式,我的问题是:Consumer占用的资源很大,不能透过
增加多个Consumer来加速整体的进行而Producer占用的资源不多可以有很多个。
我用multiprocessing分别创建Producer&Consumer的subprocess,但是在想要让
Producer将资料丢给Consumer的时候失败了,因为process不能作为agrs
所以应该是需要一个中间的buffer来帮忙传递资料,就像celery的borker一样
感谢楼上大大,我来研究一下
7F:→ sma1033: 可用queue 07/19 15:30
※ 编辑: gigayaya (36.231.21.240), 07/19/2018 20:31:37
8F:→ kenduest: multiprocessing 内不是有 Manager 与 Queue 可用? 07/19 20:49
9F:→ laputaflutin: 也可以用RQ这个套件,celery功能强大,但是概念比 07/19 23:13
10F:→ laputaflutin: 较多,除非真的很想造轮子,否则用不着自己写 07/19 23:13
11F:推 s06yji3: 透过档案或资料库传资料,收集资料的process整理写入计 07/20 08:46
12F:→ s06yji3: 算的process 去取的话呢? 07/20 08:46