[问题] 如何同时处理数个function且数次

楼主: jasonhsu14 (小健人)   2022-02-28 17:12:46
版上各位前辈好
小弟因工作上需求遇到一个问题,还麻烦版上诸位前辈协助解惑
问题详细说明如下
我有一个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
或是版友们知道有什么方法可以处理我的需求,还请协助指教
以上,先谢谢花时间阅读我问题的版友
作者: lycantrope (阿宽)   2022-02-28 17:24:00
将N个function跟main拆开写成worker 用subprocess去用subprocess.Popen 跑python3 worker.py sys.argv
楼主: jasonhsu14 (小健人)   2022-02-28 19:26:00
谢谢你回答,我研究一下subprocess
作者: Woqeker (窝颗ker)   2022-02-28 20:24:00
参数改传 queue
作者: f496328mm (为什么会流泪)   2022-02-28 23:24:00
试试看用 rabbitmq、celery 的方式ABC 是三个 worker,main 是 Producer
作者: mantour (朱子)   2022-03-01 21:40:00
把每次产生的var分别append 到queneA, queneB, queneCthread A, B, C分别跑一个loopwhile 1: if queueA.empty(): time.sleep(1) else: var=queueA.get() ......

Links booklink

Contact Us: admin [ a t ] ucptt.com