Python使用多程序實現串列埠收發資料

2021-10-21 08:15:39 字數 2250 閱讀 8112

在之前一篇文章中 python使用多執行緒實現串列埠收發資料,提到了使用多執行緒實現串列埠收發資料,曉得多執行緒的朋友可能會有點疑問:多執行緒是單cpu,雖然在io中速度比較快,但是對於乙個大的專案,多執行緒本身是加速不了太多的;針對這個問題,我用multiprocessing改了一下**。

windows:

linux:

jeston nano/rraspberry pi:

**包括自定義通訊協議的部分,但是這裡receive()的判斷沒寫完。

**如下:

'''

通訊協議:

1-2:0x5a/0x5a/ring/task/power/0xb3

2-1:0x5a/0x5a/mark/result/0xb3

以上資料均為16進製制

'''import serial

import multiprocessing

import time

defreceive()

: serial_port = serial.serial(

port=

"com5"

, baudrate=

115200

, bytesize=serial.eightbits,

parity=serial.parity_none,

stopbits=serial.stopbits_one,

)# wait a second to let the port initialize

time.sleep(

0.5)

while

true

: tran_data1 =

ord(serial_port.read())

if tran_data1 ==90:

tran_data2 =

ord(serial_port.read())

if tran_data2 ==90:

ring =

ord(serial_port.read())

task =

ord(serial_port.read())

power =

ord(serial_port.read())

print

("data receive success!"

)def

send

(mark,result)

: serial_port = serial.serial(

port=

"com7"

, baudrate=

115200

, bytesize=serial.eightbits,

parity=serial.parity_none,

stopbits=serial.stopbits_one,

)# wait a second to let the port initialize

time.sleep(

0.5)

while

true

: data =

bytearray([

0x5a

,0x5a

, mark,result,

0xb3])

print

(data)

serial_port.write(data)

time.sleep(1)

if __name__ ==

'__main__'

: mark =

0 result =

1 p1 = multiprocessing.process(target=send,args=

[mark,result]

) p2 = multiprocessing.process(target=receive)

p1.start(

) p2.start(

) p1.join(

) p2.join(

)

note:

稍微仔細一點的朋友會發現,我這裡是用了com5com7兩個埠,這樣用的原因是,多程序其實是兩個cpu(或者說兩個執行緒,這裡的執行緒指的是超執行緒技術將乙個cpu分成兩個),每個cpu都有自己的空間和運算能力,所以兩個cpu也不能同時呼叫乙個埠。

最後:

Python實現多程序

python可以實現多執行緒,但是因為global interpreter lock gil python的多執行緒只能使用乙個cpu核心,即乙個時間只有乙個執行緒在執行,多執行緒只是不同執行緒之間的切換,對多核cpu來說,就是巨大的浪費。如4核cpu,實際上只利用了乙個核,cpu利用率只有25 要...

python 實現多程序

方法一 from urllib import request from multiprocessing import process import os def url,kwargs print 當前程序id os.getpid os.getppid os.getpid 獲取當前程序id,os.ge...

python使用多程序

python多執行緒適合io密集型場景,而在cpu密集型場景,並不能充分利用多核cpu,而協程本質基於執行緒,同樣不能充分發揮多核的優勢。針對計算密集型場景需要使用多程序,python的multiprocessing與threading模組非常相似,支援用程序池的方式批量建立子程序。只需要例項化pr...