python主线程执行_Python队列 – 最多运行n个线程
場(chǎng)景:
我有一個(gè)非常大的數(shù)據(jù)庫(kù)模型遷移正在進(jìn)行新的構(gòu)建,我正在研究如何將Web應(yīng)用程序中的當(dāng)前實(shí)時(shí)數(shù)據(jù)遷移到本地測(cè)試數(shù)據(jù)庫(kù)中.
我想在python中設(shè)置一個(gè)腳本,它將同時(shí)處理我的模型的遷移.我的模型實(shí)例有from_legacy和to_legacy方法.到目前為止,我加載了所有實(shí)例并為每個(gè)實(shí)例創(chuàng)建了線程,每個(gè)線程都從核心線程模塊子類化,并使用run方法進(jìn)行轉(zhuǎn)換并保存結(jié)果.
我想讓程序中的主循環(huán)構(gòu)建這些線程的一大堆實(shí)例,并開(kāi)始逐個(gè)處理它們,在它工作時(shí)同時(shí)運(yùn)行最多10個(gè),然后將下一個(gè)進(jìn)行處理當(dāng)其他人完成遷移時(shí)處理.
我無(wú)法弄清楚如何正確利用隊(duì)列來(lái)做到這一點(diǎn)?如果每個(gè)線程代表完整的遷移任務(wù),我應(yīng)該先加載所有實(shí)例,然后創(chuàng)建一個(gè)maxsize設(shè)置為10的隊(duì)列,并且只跟蹤當(dāng)前正在運(yùn)行的隊(duì)列嗎?也許這樣的事情?
currently_running = Queue()
for model in models:
task = Migrate(models) #this is subclassed thread
currently_running.put(task)
task.start()
在這種情況下,依賴于put調(diào)用阻塞它的容量?如果我要走這條路,我怎么稱呼task_done?
或者更確切地說(shuō),如果Queue包含所有任務(wù)(不僅僅是已啟動(dòng)的任務(wù))并使用join來(lái)阻止完成?在線程隊(duì)列上調(diào)用join是否會(huì)啟動(dòng)包含的線程?
什么是最好的方法來(lái)處理“最多有N個(gè)運(yùn)行線程”問(wèn)題以及Queue應(yīng)該扮演什么角色?
總結(jié)
以上是生活随笔為你收集整理的python主线程执行_Python队列 – 最多运行n个线程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python安装第三方库win10_音频
- 下一篇: python分块处理功能_python