python基礎之多程序的建立 啟動 阻塞

2021-10-04 19:00:58 字數 2233 閱讀 1622

process()建立程序、start方法啟動程序、join方法阻塞程序

1 實驗1

有如下**,命令列中執行後會報錯,物件例項不能作為引數傳入到process函式

#列印位元組函式

def print_hex(bytes):

l = [hex(int(i)) for i in bytes]

print(" ".join(l))

#串列埠接收超時函式       

def serial_recv():

while true:

sleep(1)

#data = ser.read_all()

data = ser.read(4)

print('process serial')

print(data)

if data == b'':

command=[0x5a,0xa5,0x07,0x82,0x00,0x84,0x5a,0x01,0x00,0x0c]#切換到頁面0x0c

print_hex(command)

ser.write(command)

else:

print('get data')

return data

#主函式

if __name__ == '__main__':

port_list = list(serial.tools.list_ports.comports())

print(port_list)

if len(port_list)==0:

print('無可用串列埠')

else:

print('可以使用的串列埠有:')

for i in range(0,len(port_list)):

print(i)

print(port_list[i])    

print(port_list[i][0])

sernum='com3'

baudrate=115200

ser = serial.serial(sernum,baudrate,bytesize=8,parity='n',timeout=30) 

if ser.isopen():

print('成功開啟串列埠',sernum)

else:

print('開啟串列埠s%失敗',sernum)

print(ser)

pr1 = process(target=serial_recv,args=(ser))

pr1.start()

pr1.join()

print('parent process is running')

更改主函式和serial_recv()部分**即可,更改後的**如下:

def serial_recv():

sernum='com3'

baudrate=115200

ser = serial.serial(sernum,baudrate,bytesize=8,parity='n',timeout=3) 

while true:

sleep(1)

#data = ser.read_all()

data = ser.read(4)

print('process serial')

print(data)

if data == b'':

command=[0x5a,0xa5,0x07,0x82,0x00,0x84,0x5a,0x01,0x00,0x0c]#切換到頁面0x0c

print_hex(command)

ser.write(command)

else:

print('get data')

return data

#主函式

if __name__ == '__main__':

pr1 = process(target=serial_recv,args=())

pr1.start()

pr1.join()

print('parent process is running')

2 實驗2

因為serial_recv()函式是個死迴圈,啟動後將永不阻塞,父程序中的print('parent process is running')永不執行。

如果設定阻塞時間,pr1.join(5),則5s後該程序會阻塞並返回父程序執行print('parent process is running'),再進入serial_recv()執行。

python之多程序

要讓python實現多程序 multiprocessing 我們先來了解作業系統相關知識。unix 和 linux 作業系統提供了乙個 fork 函式系統呼叫,它非常特殊。普通的函式,呼叫一它次,執行一次,但是 fork 函式呼叫一次執行兩次,因為作業系統自動把當前程序 稱為父程序 複製了乙份 稱為...

python併發之多程序

一 multiprocessing模組介紹 python中的多執行緒無法利用多核優勢,如果想要充分地使用多核cpu的資源 os.cpu count 檢視 在python中大部分情況需要使用多程序。python提供了multiprocessing。multiprocessing模組用來開啟子程序,並在...

python學習之多程序

在介紹多程序之前,首先介紹下作業系統獲取關於程序中的一些資訊 方法描述 os.getpid 獲取當前程序的pid os.getppid 獲取當前程序的父程序的pid 在python中,我們一般都是通過引入multiprocessing模組來實現多程序程式設計,multiprocessing模組提供了...