总结:进程之间不能共享数据,线程之间是可以共享数据的,如果想要的功能是IO密集型的则建议用多线程,少了进程切换时间,任务之间并发执行;如果功能是计算密集型的,则建议用多线程,线程之间是互相独立的,互不影响,cpu会并行执行任务
1. python多进程举例
# 参考来源https://zhuanlan.zhihu.com/p/43073153 from multiprocessing import Pool import os,time def func(n): print(n) time.sleep(5) if __name__ == '__main__': p = Pool(processes=5) # process设置进程数量,不设置的时候系统自动分配任务给cpu for i in range(50): p.apply_async(func=func,args=(i,)) #异步 p.close() p.join() #异步调用apply_async,需要添加这一行
注意该任务是在有一个__main__里面执行的,执行该任务的时候,打开任务管理器查看进程数量, 如下可以看到系统起了多个进程,数量不是5,是因为我后台还有其他任务在执行
2. python多线程举例
import requests from queue import Queue import threading import time class Producer(threading.Thread): def __init__(self, page_q, *args, **kwargs): super(Producer, self).__init__(*args, **kwargs) self.page_q = page_q def run(self): while True: if self.page_q.empty(): break url = self.page_q.get() print(url) time.sleep(5) if __name__ == '__main__': page_q = Queue(100) for i in range(1, 50): page_q.put((i)) for x in range(5): pr = Producer(page_q) pr.start()
执行该代码块,会看到下面会多出来一个进程,也就是说这段代码是单进程多线程的执行方式,参考来源
https://blog.csdn.net/qq_42285296/article/details/90671979?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~first_rank_v2~rank_v25-5-90671979.nonecase&utm_term=requests%E4%BD%BF%E7%94%A8%E5%A4%9A%E7%BA%BF%E7%A8%8B
原创文章,转载请注明出处:http://124.221.219.47/article/multprocess/
liuqiao1995
1楼 - 4 年,3 月 之前
1