pyqt5多程序 python Python多程序

2021-10-13 20:21:24 字數 2678 閱讀 1155

在python中如果想建立多程序需要用到multiprrocessing中的prrocess方法。

在程序之間全域性變數是不共享的,如果要對程序的全域性變數進行使用的話就需要用到multiprrocessing的queue方法

首先我們先建立乙個多程序

import time

from multiprocessing import process

# 程序之間全域性變數不共享

def work_1():

for i in range(10):

print('任務1')

time.sleep(0.5)

def work_2():

for i in range(10):

print('任務2')

time.sleep(0.5)

# 程序執行的時候不加main 為什麼會報錯:

# 在執行過程中相當於在另外乙個py檔案中匯入這個模組並執行函式,由於是匯入模組所以

# 建立多程序的**也會被匯入,然後就又去開了執行緒,陷入無限遞迴的狀態

if __name__ == '__main__':

# 建立兩個程序

p1 = process(target=work_1)

p2 = process(target=work_2)

p1.start()

p2.start()

我們在多程序之間通訊需要用到佇列,但是這個佇列不是queue.queue() 而是multiprrocessing中的queue

queue.queue 是程序內非阻塞佇列

multiprocessing.queue 是跨程序通訊佇列

import requests

from multiprocessing import process, queue

def work_1(q):

while q.qsize() > 0:

url = q.get()

requests.get(url)

print('任務1')

def work_2(q):

while q.qsize() > 0:

url = q.get()

requests.get(url)

print('任務2')

# 將q 這個例項化物件當作引數傳入函式中(不同的程序中),可以實現多程序共享變數,把這個佇列放到乙個公共區間內

p1 = process(target=work_1, args=(q,))

p2 = process(target=work_2, args=(q,))

p1.start()

p2.start()

下面來聊一聊程序池:pool可以提供指定數量的程序供使用者呼叫,當有新的請求提交到pool中時,如果池還沒有滿,那麼就會建立乙個新的程序用來執行該請求;但如果池中的程序數已經達到規定最大值,那麼該請求就會等待,直到池中有程序結束,才會建立新的程序來它。

import requests

from multiprocessing import pool, manager # 程序池pool manager().queue() # 程序池中的佇列

import time

import os # 檢視程序的pid

# a = manager().queue() # 程序池中的佇列

def work(q):

# 判斷佇列是否有任務

while q.qsize() > 0:

# 獲取任務

url = q.get()

requests.get(url)

print('任務1{}'.format(os.getpid()))

if __name__ == '__main__':

# 程序池中的佇列

q = manager().queue()

for i in range(10):

# 增加任務

# 建立程序池 最大程序數為3

p = pool(3)

for i in range(10):

# 開啟程序執行任務 在程序池中,初始化幾個程序,輪詢執行任務,當乙個任務執行完畢後這個程序會去執行另乙個任務,直到所有任務完成

if q.qsize() > 0:

# 每次迴圈將會用空閒出來的子程序去呼叫目標

p.close() # 程序池使用完畢一定要關閉程序池:停止往程序池中新增新的任務

p.join() # 等待po中所有子程序執行完成,必須在close之後 等待執行緒池中的所有任務都執行完了之後再往下執行

# 非同步處理任務時 : 必須要加上close和join. 程序池的所有程序都是守護程序(主程序**執行結束,守護程序就結束).

pyqt5切換python版本 pyqt5介面切換

主要的思路就是建立兩個frame 如果有兩個以上同理 使用setvisible 函式顯示或者隱藏frame 引數是bool值 import sys from pyqt5.qtwidgets import from pyqt5.qtcore import from pyqt5.qtgui import...

pyqt5多執行緒優化 PyQt5多執行緒

您不應該向主檢視傳送乙個新的小部件 qlabel 因為它將是乙個新標籤,而不是原始標籤,您應該傳送str型別的文字class thread qthread changepixmap pyqtsignal qpixmap changelabel pyqtsignal str def run self ...

PyQT5 學習使用 筆記 一 安裝pyQT5

之前已經學習過了qt 的 基本使用了解了 訊號和槽 的機制。由於新專案需要跨平台,所以 在視覺開發包的選擇上 選擇了opencv python,所幸 qt也有pyqt5 的包可以和 opencv python 聯合使用開發。廢話不說了 開始安裝吧。開啟cmd命令列介面輸入 pip install p...