Python实现多任务(2)#
进程
使用multiprocessing完成多进程
import time
import multiprocessing
def sing():
for i in range(5):
print("* * *singing* * *")
time.sleep(1)
def dance():
for i in range(5):
print("* * *dancing* * *")
time.sleep(1)
def start_process():
t1 = multiprocessing.Process(target=sing)
t2 = multiprocessing.Process(target=dance)
t1.start()
t2.start()
if __name__ == '__main__':
start_process()
进程池
import multiprocessing
import os, time, random
def work(msg):
t_start = time.time()
print("%s进行中,进程号为%d\n"% (msg, os.getpid()))
time.sleep(random.random()*3)
t_stop = time.time()
print("%s执行完毕,耗时%.2fs\n" % (msg, (t_stop-t_start)))
def main():
po = multiprocessing.Pool(3)
for i in range(0, 10):
po.apply_async(work, (i,))
print("---start---")
po.close()
po.join() #关闭前让任务池中的进程执行完
print("--- End ---")
if __name__ == '__main__':
main()
使用队列完成进程间通信
import multiprocessing
def download_web(q):
data = [11, 22, 33, 44]
for temp in data:
q.put(temp)
print("写入队列结束")
def analysis_data(q):
list_data = list()
while True:
data = q.get()
list_data.append(data)
if q.empty():
break
print(list_data)
def main():
# 创建队列
q = multiprocessing.Queue()
p1 = multiprocessing.Process(target=download_web, args=(q,))
p2 = multiprocessing.Process(target=analysis_data, args=(q,))
p1.start()
p2.start()
if __name__ == '__main__':
main()