from multiprocessing import Process
from multiprocessing import Queue
import time
def write(q, urls):
print("Process is writting...")
for url in urls:
q.put(url)
print("put %s to queue..." % url)
time.sleep(2)
def read(q):
print("Process is reading...")
while True:
url = q.get(True)
print("Get %s from queue" % url)
if __name__ == "__main__":
q = Queue()
# 父进程创建Queue,并传给各个子进程
w1 = Process(target=write, args=(q,["url_1", "url_2", "url_3"]))
w2 = Process(target=write, args=[q,["url_4", "url_5", "url_6"]])
r = Process(target=read, args=(q,))
w1.start()
w2.start()
r.start()
w1.join()
w2.join()
print(r.is_alive()) # True
r.terminate()
# 测试
print(r.is_alive()) # True
print(w1.is_alive()) # False
print(w2.is_alive()) # False
print("结束")
输出
Process is writting...
put url_1 to queue...
put url_2 to queue...
put url_3 to queue...
Process is writting...
put url_4 to queue...
put url_5 to queue...
put url_6 to queue...
True
True
False
False
结束
从输出可以看出,进程r并没有执行read(),但是确是存活着,而且无法关闭