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模組提供了...