作者jasonhsu14 (14号星期五的杰森)
看板Python
标题[问题] 如何同时处理数个function且数次
时间Mon Feb 28 17:12:46 2022
版上各位前辈好
小弟因工作上需求遇到一个问题,还麻烦版上诸位前辈协助解惑
问题详细说明如下
我有一个def main()
这个main主要是每隔n秒,就产生一组变数(var)
接着这组变数会传入def A, B, C, ...(function有数个)
因为A, B, C,...一个一个处理,会使得所有function还没跑完下,下一笔变数就产生
因此上网爬了一下多线程 threading
th1 = threading.Thread(target=A, args=(var,))
th1.start()
th2 = threading.Thread(target=B, args=(var,))
th2.start()
th3 = threading.Thread(target=C, args=(var,)) ...
th3.start()
透过像这样的写法去处理,但这写法又会使得Thread一直不断产生
thread.enumerate() 会看到一堆
所以我想请教是,能否就A B C 各自设为一个Thread
然後当他接受到var时候,就各自自行处理後续动作
基本上需求就像是pyqtSignal那样
我就发射讯号到事先设定连接的function并处理
但因为我这并非UI介面,所以就暂时不考虑pyqtSignal
也有google到python内建的signal
可是看起来并非我所要的需求(或是没看仔细而忽视,若有忽视还请指教)
上网google了multiprocess、async方法
以我对这两方法的认知,似乎派不上用场 (若认知错也请指教)
因为A, B, C.. 并非复杂计算,却需要同时处理
所以暂不考虑上述两方法,而目前只先想到thread
或是版友们知道有甚麽方法可以处理我的需求,还请协助指教
以上,先谢谢花时间阅读我问题的版友
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 220.129.205.64 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1646039568.A.B75.html
1F:推 lycantrope: 将N个function跟main拆开写成worker 用subprocess去 02/28 17:24
2F:→ lycantrope: 用subprocess.Popen 跑python3 worker.py sys.argv 02/28 17:25
3F:→ jasonhsu14: 谢谢你回答,我研究一下subprocess 02/28 19:26
4F:→ Woqeker: 参数改传 queue 02/28 20:24
5F:→ f496328mm: 试试看用 rabbitmq、celery 的方式 02/28 23:24
6F:→ f496328mm: ABC 是三个 worker,main 是 Producer 02/28 23:25
7F:→ mantour: 把每次产生的var分别append 到queneA, queneB, queneC 03/01 21:40
8F:→ mantour: thread A, B, C分别跑一个loop 03/01 21:41
9F:→ mantour: while 1: if queueA.empty(): time.sleep(1) else: var= 03/01 21:46
10F:→ mantour: queueA.get() ...... 03/01 21:46
谢谢楼上几位回答,小弟最後是用mantour跟Woqeker提供的方式去处理
1F大大提供的subprocess方法,我有先试过,但我一开始没讲清楚
我的需求可能会有function A需要前一笔或前N笔参数所得到的结果再计算
尚不确定subprocess有无办法完成需求,所以先暂时用queue的方式处理
f大的rabbitmq,google一下感觉是比较进阶版的queue方式,需要些时间消化
目前先以完成需求的前提下,我是先采用queue的方式
後续会再想想这部分可以如何提高执行效率
以上再次谢谢楼上几位的协助
※ 编辑: jasonhsu14 (220.129.194.166 台湾), 03/06/2022 14:15:07