回想起在參考代碼中隊(duì)列有兩類:torch.multiprocessing.Queue,queue.Queue。前者用在多進(jìn)程里湃缎,作為多進(jìn)程中target的參數(shù)犀填;后者用在多線程中,作為多線程中target的參數(shù)嗓违。于是在代碼中用前者替換后者九巡,程序正常運(yùn)行。
以一個(gè)案例來(lái)理解進(jìn)程間通信
import random
import time
from multiprocessing import Process,Queue
# from queue import Queue
# 隊(duì)列有兩類:torch.multiprocessing.Queue蹂季,queue.Queue冕广。
# 前者用在多進(jìn)程里,作為多進(jìn)程中target的參數(shù)偿洁;后者用在多線程中撒汉,作為多線程中target的參數(shù)。
class WriteProcess(Process):
""" 寫的進(jìn)程 """
def __init__(self, q, *args, **kwargs):
self.q = q
super().__init__(*args, **kwargs)
def run(self):
ls = [
'第1行內(nèi)容',
'第2行內(nèi)容',
'第3行內(nèi)容',
'第4行內(nèi)容',
'第5行內(nèi)容',
]
for line in ls:
print('寫入內(nèi)容:{0}'.format(line))
self.q.put(line)
# 每寫入一次涕滋,休息1-5秒
time.sleep(random.randint(1, 5))
class ReadProcess(Process):
""" 讀取內(nèi)容的進(jìn)程 """
def __init__(self, q, *args, **kwargs):
self.q = q
super().__init__(*args, **kwargs)
def run(self):
while True:
content = self.q.get()
print('讀取到的內(nèi)容:{0}'.format(content))
if __name__ == '__main__':
q = Queue()
t_write = WriteProcess(q)
t_write.start()
t_read = ReadProcess(q)
t_read.start()
t_write.join()
t_read.terminate()